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)) }