OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 // A subtest of the larger MapTest. Will eliminate once the full | 4 // A subtest of the larger MapTest. Will eliminate once the full |
5 // test is running. | 5 // test is running. |
6 | 6 |
7 import "package:expect/expect.dart"; | 7 import "package:expect/expect.dart"; |
8 | 8 |
9 class MapTest { | 9 class MapTest { |
10 | |
11 static void testDeletedElement(Map map) { | 10 static void testDeletedElement(Map map) { |
12 map.clear(); | 11 map.clear(); |
13 for (int i = 0; i < 100; i++) { | 12 for (int i = 0; i < 100; i++) { |
14 map[1] = 2; | 13 map[1] = 2; |
15 Expect.equals(1, map.length); | 14 Expect.equals(1, map.length); |
16 int x = map.remove(1); | 15 int x = map.remove(1); |
17 Expect.equals(2, x); | 16 Expect.equals(2, x); |
18 Expect.equals(0, map.length); | 17 Expect.equals(0, map.length); |
19 } | 18 } |
20 Expect.equals(0, map.length); | 19 Expect.equals(0, map.length); |
21 for (int i = 0; i < 100; i++) { | 20 for (int i = 0; i < 100; i++) { |
22 map[i] = 2; | 21 map[i] = 2; |
23 Expect.equals(1, map.length); | 22 Expect.equals(1, map.length); |
24 int x = map.remove(105); | 23 int x = map.remove(105); |
25 Expect.equals(null, x); | 24 Expect.equals(null, x); |
26 Expect.equals(1, map.length); | 25 Expect.equals(1, map.length); |
27 x = map.remove(i); | 26 x = map.remove(i); |
28 Expect.equals(2, x); | 27 Expect.equals(2, x); |
29 Expect.equals(0, map.length); | 28 Expect.equals(0, map.length); |
30 } | 29 } |
31 Expect.equals(0, map.length); | 30 Expect.equals(0, map.length); |
32 map.remove(105); | 31 map.remove(105); |
33 } | 32 } |
34 | 33 |
35 static void test(Map map) { | 34 static void test(Map map) { |
36 testDeletedElement(map); | 35 testDeletedElement(map); |
37 testMap(map, 1, 2, 3, 4, 5, 6, 7, 8); | 36 testMap(map, 1, 2, 3, 4, 5, 6, 7, 8); |
38 map.clear(); | 37 map.clear(); |
39 testMap(map, "value1", "value2", "value3", "value4", "value5", | 38 testMap(map, "value1", "value2", "value3", "value4", "value5", "value6", |
40 "value6", "value7", "value8"); | 39 "value7", "value8"); |
41 } | 40 } |
42 | 41 |
43 static void testMap(Map map, key1, key2, key3, key4, key5, key6, key7, key8) { | 42 static void testMap(Map map, key1, key2, key3, key4, key5, key6, key7, key8) { |
44 int value1 = 10; | 43 int value1 = 10; |
45 int value2 = 20; | 44 int value2 = 20; |
46 int value3 = 30; | 45 int value3 = 30; |
47 int value4 = 40; | 46 int value4 = 40; |
48 int value5 = 50; | 47 int value5 = 50; |
49 int value6 = 60; | 48 int value6 = 60; |
50 int value7 = 70; | 49 int value7 = 70; |
51 int value8 = 80; | 50 int value8 = 80; |
52 | 51 |
53 Expect.equals(0, map.length); | 52 Expect.equals(0, map.length); |
54 | 53 |
55 map[key1] = value1; | 54 map[key1] = value1; |
56 Expect.equals(value1, map[key1]); | 55 Expect.equals(value1, map[key1]); |
57 map[key1] = value2; | 56 map[key1] = value2; |
58 Expect.equals(false, map.containsKey(key2)); | 57 Expect.equals(false, map.containsKey(key2)); |
59 Expect.equals(1, map.length); | 58 Expect.equals(1, map.length); |
60 | 59 |
61 map[key1] = value1; | 60 map[key1] = value1; |
62 Expect.equals(value1, map[key1]); | 61 Expect.equals(value1, map[key1]); |
63 // Add enough entries to make sure the table grows. | 62 // Add enough entries to make sure the table grows. |
64 map[key2] = value2; | 63 map[key2] = value2; |
65 Expect.equals(value2, map[key2]); | 64 Expect.equals(value2, map[key2]); |
66 Expect.equals(2, map.length); | 65 Expect.equals(2, map.length); |
67 map[key3] = value3; | 66 map[key3] = value3; |
68 Expect.equals(value2, map[key2]); | 67 Expect.equals(value2, map[key2]); |
69 Expect.equals(value3, map[key3]); | 68 Expect.equals(value3, map[key3]); |
70 map[key4] = value4; | 69 map[key4] = value4; |
71 Expect.equals(value3, map[key3]); | 70 Expect.equals(value3, map[key3]); |
72 Expect.equals(value4, map[key4]); | 71 Expect.equals(value4, map[key4]); |
73 map[key5] = value5; | 72 map[key5] = value5; |
74 Expect.equals(value4, map[key4]); | 73 Expect.equals(value4, map[key4]); |
75 Expect.equals(value5, map[key5]); | 74 Expect.equals(value5, map[key5]); |
76 map[key6] = value6; | 75 map[key6] = value6; |
77 Expect.equals(value5, map[key5]); | 76 Expect.equals(value5, map[key5]); |
78 Expect.equals(value6, map[key6]); | 77 Expect.equals(value6, map[key6]); |
79 map[key7] = value7; | 78 map[key7] = value7; |
80 Expect.equals(value6, map[key6]); | 79 Expect.equals(value6, map[key6]); |
81 Expect.equals(value7, map[key7]); | 80 Expect.equals(value7, map[key7]); |
82 map[key8] = value8; | 81 map[key8] = value8; |
83 Expect.equals(value1, map[key1]); | 82 Expect.equals(value1, map[key1]); |
84 Expect.equals(value2, map[key2]); | 83 Expect.equals(value2, map[key2]); |
85 Expect.equals(value3, map[key3]); | 84 Expect.equals(value3, map[key3]); |
86 Expect.equals(value4, map[key4]); | 85 Expect.equals(value4, map[key4]); |
87 Expect.equals(value5, map[key5]); | 86 Expect.equals(value5, map[key5]); |
88 Expect.equals(value6, map[key6]); | 87 Expect.equals(value6, map[key6]); |
89 Expect.equals(value7, map[key7]); | 88 Expect.equals(value7, map[key7]); |
90 Expect.equals(value8, map[key8]); | 89 Expect.equals(value8, map[key8]); |
91 Expect.equals(8, map.length); | 90 Expect.equals(8, map.length); |
92 | 91 |
93 map.remove(key4); | 92 map.remove(key4); |
94 Expect.equals(false, map.containsKey(key4)); | 93 Expect.equals(false, map.containsKey(key4)); |
95 Expect.equals(7, map.length); | 94 Expect.equals(7, map.length); |
96 | 95 |
97 // Test clearing the table. | 96 // Test clearing the table. |
98 map.clear(); | 97 map.clear(); |
99 Expect.equals(0, map.length); | 98 Expect.equals(0, map.length); |
100 Expect.equals(false, map.containsKey(key1)); | 99 Expect.equals(false, map.containsKey(key1)); |
101 Expect.equals(false, map.containsKey(key2)); | 100 Expect.equals(false, map.containsKey(key2)); |
102 Expect.equals(false, map.containsKey(key3)); | 101 Expect.equals(false, map.containsKey(key3)); |
103 Expect.equals(false, map.containsKey(key4)); | 102 Expect.equals(false, map.containsKey(key4)); |
104 Expect.equals(false, map.containsKey(key5)); | 103 Expect.equals(false, map.containsKey(key5)); |
105 Expect.equals(false, map.containsKey(key6)); | 104 Expect.equals(false, map.containsKey(key6)); |
106 Expect.equals(false, map.containsKey(key7)); | 105 Expect.equals(false, map.containsKey(key7)); |
107 Expect.equals(false, map.containsKey(key8)); | 106 Expect.equals(false, map.containsKey(key8)); |
108 | 107 |
109 // Test adding and removing again. | 108 // Test adding and removing again. |
110 map[key1] = value1; | 109 map[key1] = value1; |
111 Expect.equals(value1, map[key1]); | 110 Expect.equals(value1, map[key1]); |
112 Expect.equals(1, map.length); | 111 Expect.equals(1, map.length); |
113 map[key2] = value2; | 112 map[key2] = value2; |
114 Expect.equals(value2, map[key2]); | 113 Expect.equals(value2, map[key2]); |
115 Expect.equals(2, map.length); | 114 Expect.equals(2, map.length); |
116 map[key3] = value3; | 115 map[key3] = value3; |
117 Expect.equals(value3, map[key3]); | 116 Expect.equals(value3, map[key3]); |
118 map.remove(key3); | 117 map.remove(key3); |
119 Expect.equals(2, map.length); | 118 Expect.equals(2, map.length); |
120 map[key4] = value4; | 119 map[key4] = value4; |
121 Expect.equals(value4, map[key4]); | 120 Expect.equals(value4, map[key4]); |
122 map.remove(key4); | 121 map.remove(key4); |
123 Expect.equals(2, map.length); | 122 Expect.equals(2, map.length); |
124 map[key5] = value5; | 123 map[key5] = value5; |
125 Expect.equals(value5, map[key5]); | 124 Expect.equals(value5, map[key5]); |
126 map.remove(key5); | 125 map.remove(key5); |
127 Expect.equals(2, map.length); | 126 Expect.equals(2, map.length); |
128 map[key6] = value6; | 127 map[key6] = value6; |
129 Expect.equals(value6, map[key6]); | 128 Expect.equals(value6, map[key6]); |
130 map.remove(key6); | 129 map.remove(key6); |
131 Expect.equals(2, map.length); | 130 Expect.equals(2, map.length); |
132 map[key7] = value7; | 131 map[key7] = value7; |
133 Expect.equals(value7, map[key7]); | 132 Expect.equals(value7, map[key7]); |
134 map.remove(key7); | 133 map.remove(key7); |
135 Expect.equals(2, map.length); | 134 Expect.equals(2, map.length); |
136 map[key8] = value8; | 135 map[key8] = value8; |
137 Expect.equals(value8, map[key8]); | 136 Expect.equals(value8, map[key8]); |
138 map.remove(key8); | 137 map.remove(key8); |
139 Expect.equals(2, map.length); | 138 Expect.equals(2, map.length); |
140 | 139 |
141 Expect.equals(true, map.containsKey(key1)); | 140 Expect.equals(true, map.containsKey(key1)); |
142 Expect.equals(true, map.containsValue(value1)); | 141 Expect.equals(true, map.containsValue(value1)); |
143 | 142 |
144 // Test Map.forEach. | 143 // Test Map.forEach. |
145 Map other_map = new Map(); | 144 Map other_map = new Map(); |
146 void testForEachMap(key, value) { | 145 void testForEachMap(key, value) { |
147 other_map[key] = value; | 146 other_map[key] = value; |
148 } | 147 } |
149 map.forEach(testForEachMap); | |
150 Expect.equals(true, other_map.containsKey(key1)); | |
151 Expect.equals(true, other_map.containsKey(key2)); | |
152 Expect.equals(true, other_map.containsValue(value1)); | |
153 Expect.equals(true, other_map.containsValue(value2)); | |
154 Expect.equals(2, other_map.length); | |
155 | 148 |
156 other_map.clear(); | 149 map.forEach(testForEachMap); |
157 Expect.equals(0, other_map.length); | 150 Expect.equals(true, other_map.containsKey(key1)); |
| 151 Expect.equals(true, other_map.containsKey(key2)); |
| 152 Expect.equals(true, other_map.containsValue(value1)); |
| 153 Expect.equals(true, other_map.containsValue(value2)); |
| 154 Expect.equals(2, other_map.length); |
158 | 155 |
159 // Test Collection.keys. | 156 other_map.clear(); |
160 void testForEachCollection(value) { | 157 Expect.equals(0, other_map.length); |
161 other_map[value] = value; | |
162 } | |
163 Iterable keys = map.keys; | |
164 keys.forEach(testForEachCollection); | |
165 Expect.equals(true, other_map.containsKey(key1)); | |
166 Expect.equals(true, other_map.containsKey(key2)); | |
167 Expect.equals(true, other_map.containsValue(key1)); | |
168 Expect.equals(true, other_map.containsValue(key2)); | |
169 Expect.equals(true, !other_map.containsKey(value1)); | |
170 Expect.equals(true, !other_map.containsKey(value2)); | |
171 Expect.equals(true, !other_map.containsValue(value1)); | |
172 Expect.equals(true, !other_map.containsValue(value2)); | |
173 Expect.equals(2, other_map.length); | |
174 other_map.clear(); | |
175 Expect.equals(0, other_map.length); | |
176 | 158 |
177 // Test Collection.values. | 159 // Test Collection.keys. |
178 Iterable values = map.values; | 160 void testForEachCollection(value) { |
179 values.forEach(testForEachCollection); | 161 other_map[value] = value; |
180 Expect.equals(true, !other_map.containsKey(key1)); | 162 } |
181 Expect.equals(true, !other_map.containsKey(key2)); | |
182 Expect.equals(true, !other_map.containsValue(key1)); | |
183 Expect.equals(true, !other_map.containsValue(key2)); | |
184 Expect.equals(true, other_map.containsKey(value1)); | |
185 Expect.equals(true, other_map.containsKey(value2)); | |
186 Expect.equals(true, other_map.containsValue(value1)); | |
187 Expect.equals(true, other_map.containsValue(value2)); | |
188 Expect.equals(2, other_map.length); | |
189 other_map.clear(); | |
190 Expect.equals(0, other_map.length); | |
191 | 163 |
192 // Test Map.putIfAbsent. | 164 Iterable keys = map.keys; |
193 map.clear(); | 165 keys.forEach(testForEachCollection); |
194 Expect.equals(false, map.containsKey(key1)); | 166 Expect.equals(true, other_map.containsKey(key1)); |
195 map.putIfAbsent(key1, () => 10); | 167 Expect.equals(true, other_map.containsKey(key2)); |
196 Expect.equals(true, map.containsKey(key1)); | 168 Expect.equals(true, other_map.containsValue(key1)); |
197 Expect.equals(10, map[key1]); | 169 Expect.equals(true, other_map.containsValue(key2)); |
198 Expect.equals(10, | 170 Expect.equals(true, !other_map.containsKey(value1)); |
199 map.putIfAbsent(key1, () => 11)); | 171 Expect.equals(true, !other_map.containsKey(value2)); |
200 } | 172 Expect.equals(true, !other_map.containsValue(value1)); |
| 173 Expect.equals(true, !other_map.containsValue(value2)); |
| 174 Expect.equals(2, other_map.length); |
| 175 other_map.clear(); |
| 176 Expect.equals(0, other_map.length); |
| 177 |
| 178 // Test Collection.values. |
| 179 Iterable values = map.values; |
| 180 values.forEach(testForEachCollection); |
| 181 Expect.equals(true, !other_map.containsKey(key1)); |
| 182 Expect.equals(true, !other_map.containsKey(key2)); |
| 183 Expect.equals(true, !other_map.containsValue(key1)); |
| 184 Expect.equals(true, !other_map.containsValue(key2)); |
| 185 Expect.equals(true, other_map.containsKey(value1)); |
| 186 Expect.equals(true, other_map.containsKey(value2)); |
| 187 Expect.equals(true, other_map.containsValue(value1)); |
| 188 Expect.equals(true, other_map.containsValue(value2)); |
| 189 Expect.equals(2, other_map.length); |
| 190 other_map.clear(); |
| 191 Expect.equals(0, other_map.length); |
| 192 |
| 193 // Test Map.putIfAbsent. |
| 194 map.clear(); |
| 195 Expect.equals(false, map.containsKey(key1)); |
| 196 map.putIfAbsent(key1, () => 10); |
| 197 Expect.equals(true, map.containsKey(key1)); |
| 198 Expect.equals(10, map[key1]); |
| 199 Expect.equals(10, map.putIfAbsent(key1, () => 11)); |
| 200 } |
201 | 201 |
202 static testKeys(Map map) { | 202 static testKeys(Map map) { |
203 map[1] = 101; | 203 map[1] = 101; |
204 map[2] = 102; | 204 map[2] = 102; |
205 Iterable k = map.keys; | 205 Iterable k = map.keys; |
206 Expect.equals(2, k.length); | 206 Expect.equals(2, k.length); |
207 Iterable v = map.values; | 207 Iterable v = map.values; |
208 Expect.equals(2, v.length); | 208 Expect.equals(2, v.length); |
209 Expect.equals(true, map.containsValue(101)); | 209 Expect.equals(true, map.containsValue(101)); |
210 Expect.equals(true, map.containsValue(102)); | 210 Expect.equals(true, map.containsValue(102)); |
211 Expect.equals(false, map.containsValue(103)); | 211 Expect.equals(false, map.containsValue(103)); |
212 } | 212 } |
213 | 213 |
214 static testMain() { | 214 static testMain() { |
215 test(new Map()); | 215 test(new Map()); |
216 testKeys(new Map()); | 216 testKeys(new Map()); |
217 } | 217 } |
218 } | 218 } |
219 | 219 |
220 | |
221 main() { | 220 main() { |
222 MapTest.testMain(); | 221 MapTest.testMain(); |
223 } | 222 } |
OLD | NEW |