]> Cypherpunks repositories - gostls13.git/commitdiff
reflect: empty slice/map is not DeepEqual to nil
authorRuss Cox <rsc@golang.org>
Mon, 14 Nov 2011 21:11:15 +0000 (16:11 -0500)
committerRuss Cox <rsc@golang.org>
Mon, 14 Nov 2011 21:11:15 +0000 (16:11 -0500)
R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/5373095

src/pkg/reflect/all_test.go
src/pkg/reflect/deepequal.go

index 271a65114783d047dd7d0fa0ff77f06f8f4ebfe3..2f6917d3c629c1eaaecb145417672250db483e0b 100644 (file)
@@ -651,6 +651,14 @@ var deepEqualTests = []DeepEqualTest{
        {nil, 1, false},
        {1, nil, false},
 
+       // Nil vs empty: not the same.
+       {[]int{}, []int(nil), false},
+       {[]int{}, []int{}, true},
+       {[]int(nil), []int(nil), true},
+       {map[int]int{}, map[int]int(nil), false},
+       {map[int]int{}, map[int]int{}, true},
+       {map[int]int(nil), map[int]int(nil), true},
+
        // Mismatched types
        {1, 1.0, false},
        {int32(1), int64(1), false},
index 63c28fe2024d37c7fd16a711c7741dd62b46a526..df5ec0a6099576a27ecc83282ed3e346a8ebb015 100644 (file)
@@ -69,6 +69,9 @@ func deepValueEqual(v1, v2 Value, visited map[uintptr]*visit, depth int) (b bool
                }
                return true
        case Slice:
+               if v1.IsNil() != v2.IsNil() {
+                       return false
+               }
                if v1.Len() != v2.Len() {
                        return false
                }
@@ -93,6 +96,9 @@ func deepValueEqual(v1, v2 Value, visited map[uintptr]*visit, depth int) (b bool
                }
                return true
        case Map:
+               if v1.IsNil() != v2.IsNil() {
+                       return false
+               }
                if v1.Len() != v2.Len() {
                        return false
                }