From 73571dd423f343a0126e65a8149bf5ac83ee3f55 Mon Sep 17 00:00:00 2001 From: Damian Gryski Date: Mon, 14 Mar 2022 11:51:44 -0700 Subject: testdata: add test for mapgrowth logic --- testdata/mapgrowth.go | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++ testdata/mapgrowth.txt | 1 + 2 files changed, 67 insertions(+) create mode 100644 testdata/mapgrowth.go create mode 100644 testdata/mapgrowth.txt (limited to 'testdata') 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 -- cgit v1.2.3