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 @@ -57,6 +57,7 @@ func TestBuild(t *testing.T) {
57
57
"json.go" ,
58
58
"map.go" ,
59
59
"math.go" ,
60
+ "mapgrowth.go" ,
60
61
"print.go" ,
61
62
"reflect.go" ,
62
63
"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