aboutsummaryrefslogtreecommitdiffhomepage
path: root/testdata
diff options
context:
space:
mode:
authorDamian Gryski <[email protected]>2022-03-14 11:51:44 -0700
committerRon Evans <[email protected]>2022-04-04 13:22:19 +0200
commit73571dd423f343a0126e65a8149bf5ac83ee3f55 (patch)
treee8668c8ab391193b2b256bc56284f231657525c2 /testdata
parent8872229a0bcf6369e78935640995004cea6f34e1 (diff)
downloadtinygo-73571dd423f343a0126e65a8149bf5ac83ee3f55.tar.gz
tinygo-73571dd423f343a0126e65a8149bf5ac83ee3f55.zip
testdata: add test for mapgrowth logic
Diffstat (limited to 'testdata')
-rw-r--r--testdata/mapgrowth.go66
-rw-r--r--testdata/mapgrowth.txt1
2 files changed, 67 insertions, 0 deletions
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