Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: tests/corelib/queue_test.dart

Issue 12611014: Cleanups in collection. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 4
5 library queue.test; 5 library queue.test;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 abstract class QueueTest { 9 abstract class QueueTest {
10 10
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 void checkQueue(Queue queue, int expectedSize, int expectedSum) { 124 void checkQueue(Queue queue, int expectedSize, int expectedSum) {
125 Expect.equals(expectedSize, queue.length); 125 Expect.equals(expectedSize, queue.length);
126 int sum = 0; 126 int sum = 0;
127 void sumElements(int value) { 127 void sumElements(int value) {
128 sum += value; 128 sum += value;
129 } 129 }
130 queue.forEach(sumElements); 130 queue.forEach(sumElements);
131 Expect.equals(expectedSum, sum); 131 Expect.equals(expectedSum, sum);
132 } 132 }
133 133
134 testLength(int length, Queue queue) {
135 Expect.equals(length, queue.length);
136 ((length == 0) ? Expect.isTrue : Expect.isFalse)(queue.isEmpty);
137 }
138
134 void testAddAll() { 139 void testAddAll() {
135 Set<int> set = new Set<int>.from([1, 2, 4]); 140 Set<int> set = new Set<int>.from([1, 2, 4]);
141 Expect.equals(3, set.length);
136 142
137 Queue queue1 = newQueueFrom(set); 143 Queue queue1 = newQueueFrom(set);
138 Queue queue2 = newQueue(); 144 Queue queue2 = newQueue();
139 Queue queue3 = newQueue(); 145 Queue queue3 = newQueue();
146 testLength(3, queue1);
147 testLength(0, queue2);
148 testLength(0, queue3);
140 149
141 queue2.addAll(set); 150 queue2.addAll(set);
151 testLength(3, queue2);
152
142 queue3.addAll(queue1); 153 queue3.addAll(queue1);
143 154 testLength(3, queue3);
144 Expect.equals(3, set.length);
145 Expect.equals(3, queue1.length);
146 Expect.equals(3, queue2.length);
147 Expect.equals(3, queue3.length);
148 155
149 int sum = 0; 156 int sum = 0;
150 void f(e) { sum += e; }; 157 void f(e) { sum += e; };
151 158
152 set.forEach(f); 159 set.forEach(f);
153 Expect.equals(7, sum); 160 Expect.equals(7, sum);
154 sum = 0; 161 sum = 0;
155 162
156 queue1.forEach(f); 163 queue1.forEach(f);
157 Expect.equals(7, sum); 164 Expect.equals(7, sum);
(...skipping 14 matching lines...) Expand all
172 179
173 queue2.addAll(set); 180 queue2.addAll(set);
174 queue3.addAll(queue1); 181 queue3.addAll(queue1);
175 182
176 Expect.equals(0, set.length); 183 Expect.equals(0, set.length);
177 Expect.equals(0, queue1.length); 184 Expect.equals(0, queue1.length);
178 Expect.equals(0, queue2.length); 185 Expect.equals(0, queue2.length);
179 Expect.equals(0, queue3.length); 186 Expect.equals(0, queue3.length);
180 } 187 }
181 188
189 void testLengthChanges() {
190 // Test that the length property is updated properly by
191 // modifications;
192 Queue queue = newQueue();
193 testLength(0, queue);
194
195 for (int i = 1; i <= 10; i++) {
196 queue.add(i);
197 testLength(i, queue);
198 }
199
200 for (int i = 1; i <= 10; i++) {
201 queue.addFirst(i);
202 testLength(10 + i, queue);
203 }
204
205 for (int i = 1; i <= 10; i++) {
206 queue.addLast(i);
207 testLength(20 + i, queue);
208 }
209
210 queue.addAll([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
211 testLength(40, queue);
212
213 for (int i = 1; i <= 5; i++) {
214 Expect.equals(i, queue.removeFirst());
215 testLength(40 - i, queue);
216 }
217
218 for (int i = 1; i <= 5; i++) {
219 Expect.equals(11 - i, queue.removeLast());
220 testLength(35 - i, queue);
221 }
222
223 queue.remove(10);
224 testLength(29, queue);
225
226 queue.removeAll([4, 6]);
227 testLength(23, queue);
228
229 queue.retainAll([1, 3, 5, 7, 9, 10]); // Remove 2 and 8.
230 testLength(17, queue);
231
232 queue.removeMatching((x) = x == 7);
233 testLength(14, queue);
234
235 queue.retainMatching((x) = x != 3);
236 testLength(11, queue);
237
238 Expect.listEquals([9, 1, 5, 9, 10, 1, 5, 9, 10, 1, 5], queue.toList());
239 }
240
182 void testLarge() { 241 void testLarge() {
183 int N = 10000; 242 int N = 10000;
184 Set set = new Set(); 243 Set set = new Set();
185 244
186 Queue queue = newQueue(); 245 Queue queue = newQueue();
187 Expect.isTrue(queue.isEmpty); 246 Expect.isTrue(queue.isEmpty);
188 247
189 for (int i = 0; i < N; i++) { 248 for (int i = 0; i < N; i++) {
190 queue.add(i); 249 queue.add(i);
191 set.add(i); 250 set.add(i);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 Expect.equals(list.length, queue.length); 314 Expect.equals(list.length, queue.length);
256 to = queue.toList(); 315 to = queue.toList();
257 Expect.listEquals(list, to); 316 Expect.listEquals(list, to);
258 } 317 }
259 } 318 }
260 } 319 }
261 320
262 class ListQueueTest extends QueueTest { 321 class ListQueueTest extends QueueTest {
263 Queue newQueue() => new ListQueue(); 322 Queue newQueue() => new ListQueue();
264 Queue newQueueFrom(Iterable elements) => new ListQueue.from(elements); 323 Queue newQueueFrom(Iterable elements) => new ListQueue.from(elements);
324
325 void testMain() {
326 super.testMain();
327 trickyTest();
328 }
329
330 void trickyTest() {
331 // Test behavior around the know growing capacities of a ListQueue.
332 Queue q = new ListQueue();
333
334 for (int i = 0; i < 255; i++) {
335 q.add(i);
336 }
337 for (int i = 0; i < 128; i++) {
338 Expect.equals(i, q.removeFirst());
339 }
340 q.add(255);
341 for (int i = 0; i < 127; i++) {
342 q.add(i);
343 }
344
345 Expect.equals(255, q.length);
346
347 // Remove element at end of internal buffer.
348 q.removeMatching((v) => v == 255);
349 // Remove element at beginning of internal buffer.
350 q.removeMatching((v) => v == 0);
351 // Remove element at both ends of internal buffer.
352 q.removeMatching((v) => v == 254 || v == 1);
353
354 Expect.equals(251, q.length);
355
356 Iterable i255 = new Iterable.generate(255, (x) => x);
357
358 q = new ListQueue();
359 q.addAll(i255);
360 Expect.listEquals(i255.toList(), q.toList());
361
362 q = new ListQueue();
363 q.addAll(i255.toList());
364 Expect.listEquals(i255.toList(), q.toList());
365
366 q = new ListQueue.from(i255);
367 for (int i = 0; i < 128; i++) q.removeFirst();
368 q.add(256);
369 q.add(0);
370 q.addAll(i255.toList());
371 Expect.equals(129 + 255, q.length);
372
373 // Test addAll that requires the queue to grow.
374 q = new ListQueue();
375 q.addAll(i255.take(35));
376 q.addAll(i255.skip(35).take(96));
377 q.addAll(i255.skip(35 + 96));
378 Expect.listEquals(i255.toList(), q.toList());
379 }
265 } 380 }
266 381
267 class DoubleLinkedQueueTest extends QueueTest { 382 class DoubleLinkedQueueTest extends QueueTest {
268 Queue newQueue() => new DoubleLinkedQueue(); 383 Queue newQueue() => new DoubleLinkedQueue();
269 Queue newQueueFrom(Iterable elements) => new DoubleLinkedQueue.from(elements); 384 Queue newQueueFrom(Iterable elements) => new DoubleLinkedQueue.from(elements);
270 385
271 void testMain() { 386 void testMain() {
272 super.testMain(); 387 super.testMain();
273 testQueueElements(); 388 testQueueElements();
274 } 389 }
275 390
276 void testQueueElements() { 391 void testQueueElements() {
277 DoubleLinkedQueue<int> queue1 = new DoubleLinkedQueue<int>.from([1, 2, 4]); 392 DoubleLinkedQueue<int> queue1 = new DoubleLinkedQueue<int>.from([1, 2, 4]);
278 DoubleLinkedQueue<int> queue2 = new DoubleLinkedQueue<int>(); 393 DoubleLinkedQueue<int> queue2 = new DoubleLinkedQueue<int>();
279 queue2.addAll(queue1); 394 queue2.addAll(queue1);
280 395
281 Expect.equals(queue1.length, queue2.length); 396 Expect.equals(queue1.length, queue2.length);
282 DoubleLinkedQueueEntry<int> entry1 = queue1.firstEntry(); 397 DoubleLinkedQueueEntry<int> entry1 = queue1.firstEntry();
283 DoubleLinkedQueueEntry<int> entry2 = queue2.firstEntry(); 398 DoubleLinkedQueueEntry<int> entry2 = queue2.firstEntry();
284 while (entry1 != null) { 399 while (entry1 != null) {
285 Expect.equals(true, !identical(entry1, entry2)); 400 Expect.equals(true, !identical(entry1, entry2));
286 entry1 = entry1.nextEntry(); 401 entry1 = entry1.nextEntry();
287 entry2 = entry2.nextEntry(); 402 entry2 = entry2.nextEntry();
288 } 403 }
289 Expect.equals(null, entry2); 404 Expect.equals(null, entry2);
290 } 405 }
291 } 406 }
292 407
293 void trickyTest() {
294 Queue q = new ListQueue();
295
296 for (int i = 0; i < 255; i++) {
297 q.add(i);
298 }
299 for (int i = 0; i < 128; i++) {
300 Expect.equals(i, q.removeFirst());
301 }
302 q.add(255);
303 for (int i = 0; i < 127; i++) {
304 q.add(i);
305 }
306
307 Expect.equals(255, q.length);
308
309 // Remove element at end of internal buffer.
310 q.removeMatching((v) => v == 255);
311 // Remove element at beginning of internal buffer.
312 q.removeMatching((v) => v == 0);
313 // Remove element at both ends of internal buffer.
314 q.removeMatching((v) => v == 254 || v == 1);
315
316 Expect.equals(251, q.length);
317
318 Iterable i255 = new Iterable.generate(255, (x) => x);
319
320 q = new ListQueue();
321 q.addAll(i255);
322 Expect.listEquals(i255.toList(), q.toList());
323
324 q = new ListQueue();
325 q.addAll(i255.toList());
326 Expect.listEquals(i255.toList(), q.toList());
327
328 q = new ListQueue.from(i255);
329 for (int i = 0; i < 128; i++) q.removeFirst();
330 q.add(256);
331 q.add(0);
332 q.addAll(i255.toList());
333 Expect.equals(129 + 255, q.length);
334
335 // Test addAll that requires the queue to grow.
336 q = new ListQueue();
337 q.addAll(i255.take(35));
338 q.addAll(i255.skip(35).take(96));
339 q.addAll(i255.skip(35 + 96));
340 Expect.listEquals(i255.toList(), q.toList());
341 }
342 408
343 main() { 409 main() {
344 new DoubleLinkedQueueTest().testMain(); 410 new DoubleLinkedQueueTest().testMain();
345 new ListQueueTest().testMain(); 411 new ListQueueTest().testMain();
346 trickyTest();
347 } 412 }
OLDNEW
« sdk/lib/collection/splay_tree.dart ('K') | « tests/corelib/collection_length_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698