rename variables for clarity.

add test for structure alignment/offset.

R=gri
DELTA=49  (35 added, 0 deleted, 14 changed)
OCL=28068
CL=28068
This commit is contained in:
Rob Pike 2009-04-29 22:16:53 -07:00
parent 625866a977
commit 93831d25db
2 changed files with 48 additions and 13 deletions

View file

@ -6,7 +6,8 @@ package reflect
import (
"reflect";
"testing"
"testing";
"unsafe";
)
var doprint bool = false
@ -472,3 +473,37 @@ func TestDeepEqualComplexStructInequality(t *testing.T) {
t.Error("DeepEqual(complex different) = true, want false");
}
}
func check2ndField(x interface{}, offs uintptr, t *testing.T) {
s := reflect.NewValue(x).(reflect.StructValue);
name, ftype, tag, reflect_offset := s.Type().(reflect.StructType).Field(1);
if uintptr(reflect_offset) != offs {
t.Error("mismatched offsets in structure alignment:", reflect_offset, offs);
}
}
// Check that structure alignment & offsets viewed through reflect agree with those
// from the compiler itself.
func TestAlignment(t *testing.T) {
type T1inner struct {
a int
}
type T1 struct {
T1inner;
f int;
}
type T2inner struct {
a, b int
}
type T2 struct {
T2inner;
f int;
}
x := T1{T1inner{2}, 17};
check2ndField(x, uintptr(unsafe.Pointer(&x.f)) - uintptr(unsafe.Pointer(&x)), t);
x1 := T2{T2inner{2, 3}, 17};
check2ndField(x1, uintptr(unsafe.Pointer(&x1.f)) - uintptr(unsafe.Pointer(&x1)), t);
}