Skip to content

Commit 050d516

Browse files
dgryskideadprogram
authored andcommitted
testdata: add test for mapgrowth logic
1 parent 9a8328f commit 050d516

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

main_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ func TestBuild(t *testing.T) {
5757
"json.go",
5858
"map.go",
5959
"math.go",
60+
"mapgrowth.go",
6061
"print.go",
6162
"reflect.go",
6263
"slice.go",

testdata/mapgrowth.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package main
2+
3+
func main() {
4+
5+
m := make(map[int]int)
6+
7+
const (
8+
Delete = 500
9+
N = Delete * 2
10+
)
11+
12+
for i := 0; i < Delete; i++ {
13+
m[i] = i
14+
}
15+
16+
var deleted bool
17+
for k, v := range m {
18+
if k == 0 {
19+
// grow map
20+
for i := Delete; i < N; i++ {
21+
m[i] = i
22+
}
23+
24+
// delete some elements
25+
for i := 0; i < Delete; i++ {
26+
delete(m, i)
27+
}
28+
deleted = true
29+
continue
30+
}
31+
32+
// make sure we never see a deleted element later in our iteration
33+
if deleted && v < Delete {
34+
println("saw deleted element", v)
35+
}
36+
}
37+
38+
if len(m) != N-Delete {
39+
println("bad length post grow/delete", len(m))
40+
}
41+
42+
seen := make([]bool, 500)
43+
44+
var mcount int
45+
for k, v := range m {
46+
if k != v {
47+
println("element mismatch", k, v)
48+
}
49+
if k < Delete {
50+
println("saw deleted element post-grow", k)
51+
}
52+
seen[v-Delete] = true
53+
mcount++
54+
}
55+
56+
for _, v := range seen {
57+
if !v {
58+
println("missing key", v)
59+
}
60+
}
61+
62+
if mcount != N-Delete {
63+
println("bad number of elements post-grow:", mcount)
64+
}
65+
println("done")
66+
}

testdata/mapgrowth.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
done

0 commit comments

Comments
 (0)