63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
"unsafe"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// go test -v homework_test.go
|
|
|
|
func Trace(stacks [][]uintptr) []uintptr {
|
|
// need to implement
|
|
return nil
|
|
}
|
|
|
|
func TestTrace(t *testing.T) {
|
|
var heapObjects = []int{
|
|
0x00, 0x00, 0x00, 0x00, 0x00,
|
|
}
|
|
|
|
var heapPointer1 *int = &heapObjects[1]
|
|
var heapPointer2 *int = &heapObjects[2]
|
|
var heapPointer3 *int = nil
|
|
var heapPointer4 **int = &heapPointer3
|
|
|
|
var stacks = [][]uintptr{
|
|
{
|
|
uintptr(unsafe.Pointer(&heapPointer1)), 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, uintptr(unsafe.Pointer(&heapObjects[0])),
|
|
0x00, 0x00, 0x00, 0x00,
|
|
},
|
|
{
|
|
uintptr(unsafe.Pointer(&heapPointer2)), 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, uintptr(unsafe.Pointer(&heapObjects[1])),
|
|
0x00, 0x00, 0x00, uintptr(unsafe.Pointer(&heapObjects[2])),
|
|
uintptr(unsafe.Pointer(&heapPointer4)), 0x00, 0x00, 0x00,
|
|
},
|
|
{
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, uintptr(unsafe.Pointer(&heapObjects[3])),
|
|
},
|
|
}
|
|
|
|
pointers := Trace(stacks)
|
|
expectedPointers := []uintptr{
|
|
uintptr(unsafe.Pointer(&heapPointer1)),
|
|
uintptr(unsafe.Pointer(&heapObjects[0])),
|
|
uintptr(unsafe.Pointer(&heapPointer2)),
|
|
uintptr(unsafe.Pointer(&heapObjects[1])),
|
|
uintptr(unsafe.Pointer(&heapObjects[2])),
|
|
uintptr(unsafe.Pointer(&heapPointer4)),
|
|
uintptr(unsafe.Pointer(&heapPointer3)),
|
|
uintptr(unsafe.Pointer(&heapObjects[3])),
|
|
}
|
|
|
|
assert.True(t, reflect.DeepEqual(expectedPointers, pointers))
|
|
}
|