Files
deep_go/homework/garbage_collector/homework_test.go

63 lines
1.5 KiB
Go
Raw Normal View History

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