| // Copyright 2025 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package scan_test | |
| import ( | |
| "internal/goarch" | |
| "internal/runtime/gc" | |
| "internal/runtime/gc/scan" | |
| "testing" | |
| ) | |
| type expandFunc func(sizeClass int, packed *gc.ObjMask, unpacked *gc.PtrMask) | |
| func testExpand(t *testing.T, expF expandFunc) { | |
| expR := scan.ExpandReference | |
| testObjs(t, func(t *testing.T, sizeClass int, objs *gc.ObjMask) { | |
| var want, got gc.PtrMask | |
| expR(sizeClass, objs, &want) | |
| expF(sizeClass, objs, &got) | |
| for i := range want { | |
| if got[i] != want[i] { | |
| t.Errorf("expansion differs from reference at bit %d", i*goarch.PtrSize) | |
| if goarch.PtrSize == 4 { | |
| t.Logf("got: %032b", got[i]) | |
| t.Logf("want: %032b", want[i]) | |
| } else { | |
| t.Logf("got: %064b", got[i]) | |
| t.Logf("want: %064b", want[i]) | |
| } | |
| } | |
| } | |
| }) | |
| } | |