github.com/alexflint/go-memdump@v1.1.0/relocate_test.go (about)

     1  package memdump
     2  
     3  import (
     4  	"bytes"
     5  	"reflect"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestLocations(t *testing.T) {
    13  	expected := locations{
    14  		Main:     2,
    15  		Pointers: []int64{3, 4},
    16  	}
    17  
    18  	var b bytes.Buffer
    19  
    20  	err := encodeLocations(&b, &expected)
    21  	require.NoError(t, err)
    22  
    23  	var actual locations
    24  	err = decodeLocations(&b, &actual)
    25  	require.NoError(t, err)
    26  
    27  	assert.Equal(t, expected, actual)
    28  }
    29  
    30  func TestRelocate_EmptyBuffer(t *testing.T) {
    31  	var buf []byte
    32  	_, err := relocate(buf, nil, 0, reflect.TypeOf(0))
    33  	assert.Error(t, err)
    34  }
    35  
    36  func TestRelocate_MainOutOfBounds(t *testing.T) {
    37  	buf := []byte{1, 2, 3}
    38  	_, err := relocate(buf, nil, 100, reflect.TypeOf(0))
    39  	assert.Error(t, err)
    40  }
    41  
    42  func TestRelocate_PointerOutOfBounds(t *testing.T) {
    43  	buf := []byte{1, 2, 3}
    44  	_, err := relocate(buf, []int64{100}, 0, reflect.TypeOf(0))
    45  	assert.Error(t, err)
    46  }
    47  
    48  func BenchmarkLocations(b *testing.B) {
    49  	in := locations{Pointers: make([]int64, 200000)}
    50  	var out locations
    51  
    52  	var buf bytes.Buffer
    53  	err := encodeLocations(&buf, &in)
    54  	require.NoError(b, err)
    55  
    56  	b.ResetTimer()
    57  	for i := 0; i < b.N; i++ {
    58  		r := bytes.NewBuffer(buf.Bytes())
    59  		err = decodeLocations(r, &out)
    60  		require.NoError(b, err)
    61  	}
    62  }