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 }