Исходники и презентации
This commit is contained in:
62
homework/garbage_collector/homework_test.go
Normal file
62
homework/garbage_collector/homework_test.go
Normal file
@ -0,0 +1,62 @@
|
||||
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))
|
||||
}
|
||||
Reference in New Issue
Block a user