aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--main_test.go1
-rw-r--r--testdata/mapgrowth.go66
-rw-r--r--testdata/mapgrowth.txt1
3 files changed, 68 insertions, 0 deletions
diff --git a/main_test.go b/main_test.go
index 3b088ada8..01835a2c6 100644
--- a/main_test.go
+++ b/main_test.go
@@ -57,6 +57,7 @@ func TestBuild(t *testing.T) {
"json.go",
"map.go",
"math.go",
+ "mapgrowth.go",
"print.go",
"reflect.go",
"slice.go",
diff --git a/testdata/mapgrowth.go b/testdata/mapgrowth.go
new file mode 100644
index 000000000..5a37303af
--- /dev/null
+++ b/testdata/mapgrowth.go
@@ -0,0 +1,66 @@
+package main
+
+func main() {
+
+ m := make(map[int]int)
+
+ const (
+ Delete = 500
+ N = Delete * 2
+ )
+
+ for i := 0; i < Delete; i++ {
+ m[i] = i
+ }
+
+ var deleted bool
+ for k, v := range m {
+ if k == 0 {
+ // grow map
+ for i := Delete; i < N; i++ {
+ m[i] = i
+ }
+
+ // delete some elements
+ for i := 0; i < Delete; i++ {
+ delete(m, i)
+ }
+ deleted = true
+ continue
+ }
+
+ // make sure we never see a deleted element later in our iteration
+ if deleted && v < Delete {
+ println("saw deleted element", v)
+ }
+ }
+
+ if len(m) != N-Delete {
+ println("bad length post grow/delete", len(m))
+ }
+
+ seen := make([]bool, 500)
+
+ var mcount int
+ for k, v := range m {
+ if k != v {
+ println("element mismatch", k, v)
+ }
+ if k < Delete {
+ println("saw deleted element post-grow", k)
+ }
+ seen[v-Delete] = true
+ mcount++
+ }
+
+ for _, v := range seen {
+ if !v {
+ println("missing key", v)
+ }
+ }
+
+ if mcount != N-Delete {
+ println("bad number of elements post-grow:", mcount)
+ }
+ println("done")
+}
diff --git a/testdata/mapgrowth.txt b/testdata/mapgrowth.txt
new file mode 100644
index 000000000..19f86f493
--- /dev/null
+++ b/testdata/mapgrowth.txt
@@ -0,0 +1 @@
+done