diff options
| author | Patrick Mezard <[email protected]> | 2013-12-01 16:38:22 +0100 |
|---|---|---|
| committer | Patrick Mezard <[email protected]> | 2013-12-01 16:46:38 +0100 |
| commit | 264fa19defb385c37e0a849fab9e91e58b1b67ea (patch) | |
| tree | 62c6885ee422de8a4e8f50d5613ccaa32a0a6945 /spew/common_test.go | |
| parent | e762b3d1320b76030bd7f6cc2bfc3d9acce874c0 (diff) | |
tests: fix TestSortValues on 32-bits platforms
reflect.DeepEqual fails when comparing reflect.Value containing float64. I
think it cannot make sense of reflect.Value pointer tricks and directly
compare reflect.Value.val fields which contain the float value in 64 bits,
but a pointer to the float in 32 bits.
Fortunately, interface{} which have a similar memory layout, compare correctly,
so we just turn the []reflect.Value into []interface{}.
Diffstat (limited to 'spew/common_test.go')
| -rw-r--r-- | spew/common_test.go | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/spew/common_test.go b/spew/common_test.go index c27f798..3bea81f 100644 --- a/spew/common_test.go +++ b/spew/common_test.go @@ -116,6 +116,14 @@ func testFailed(result string, wants []string) bool { // TestSortValues ensures the sort functionality for relect.Value based sorting // works as intended. func TestSortValues(t *testing.T) { + getInterfaces := func(values []reflect.Value) []interface{} { + interfaces := []interface{}{} + for _, v := range values { + interfaces = append(interfaces, v.Interface()) + } + return interfaces + } + v := reflect.ValueOf a := v("a") @@ -171,8 +179,14 @@ func TestSortValues(t *testing.T) { } for _, test := range tests { spew.SortValues(test.input) - if !reflect.DeepEqual(test.input, test.expected) { - t.Errorf("Sort mismatch:\n %v != %v", test.input, test.expected) + // reflect.DeepEqual cannot really make sense of reflect.Value, + // probably because of all the pointer tricks. For instance, + // v(2.0) != v(2.0) on a 32-bits system. Turn them into interface{} + // instead. + input := getInterfaces(test.input) + expected := getInterfaces(test.expected) + if !reflect.DeepEqual(input, expected) { + t.Errorf("Sort mismatch:\n %v != %v", input, expected) } } } |
