assert(v2.Type().String(), "interface { }");
v3 := v2.(reflect.InterfaceValue).Value();
assert(v3.Type().String(), "float");
-
+
i3 := v2.Interface();
if f, ok := i3.(float); !ok {
a, typ, c := sys.Reflect(i3);
y float32
}
+type NotBasic Basic
+
type Recursive struct {
x int;
r *Recursive
DeepEqualTest{ 0.5, "hello", false },
DeepEqualTest{ []int{ 1, 2, 3 }, [3]int{ 1, 2, 3 }, false },
DeepEqualTest{ &[3]interface{} { 1, 2, 4 }, &[3]interface{} { 1, 2, "s" }, false },
+ DeepEqualTest{ Basic{ 1, 0.5 }, NotBasic{ 1, 0.5 }, false },
}
func TestDeepEqual(t *testing.T) {
// handles recursive types. Until reflection supports maps, maps are equal iff
// they are identical.
func DeepEqual(a1, a2 interface{}) bool {
- return deepValueEqual(NewValue(a1), NewValue(a2), make(map[Addr]Addr));
+ v1 := NewValue(a1);
+ v2 := NewValue(a2);
+ if !equalType(v1.Type(), v2.Type()) {
+ return false;
+ }
+ return deepValueEqual(v1, v2, make(map[Addr]Addr));
}