File tree Expand file tree Collapse file tree 3 files changed +68
-0
lines changed Expand file tree Collapse file tree 3 files changed +68
-0
lines changed Original file line number Diff line number Diff line change @@ -59,6 +59,7 @@ func TestBuild(t *testing.T) {
5959 "json.go" ,
6060 "map.go" ,
6161 "math.go" ,
62+ "mapgrowth.go" ,
6263 "print.go" ,
6364 "reflect.go" ,
6465 "slice.go" ,
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 1+ done
You can’t perform that action at this time.
0 commit comments