Index: tests/corelib/queue_test.dart |
diff --git a/tests/corelib/queue_test.dart b/tests/corelib/queue_test.dart |
deleted file mode 100644 |
index b169bcf36a4d7dd0a7d0a7cecc50803be0156208..0000000000000000000000000000000000000000 |
--- a/tests/corelib/queue_test.dart |
+++ /dev/null |
@@ -1,488 +0,0 @@ |
-// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-library queue.test; |
- |
-import "package:expect/expect.dart"; |
-import 'dart:collection'; |
- |
-abstract class QueueTest { |
- Queue newQueue(); |
- Queue newQueueFrom(Iterable iterable); |
- |
- void testMain() { |
- Queue queue = newQueue(); |
- checkQueue(queue, 0, 0); |
- |
- queue.addFirst(1); |
- checkQueue(queue, 1, 1); |
- |
- queue.addLast(10); |
- checkQueue(queue, 2, 11); |
- |
- Expect.equals(10, queue.removeLast()); |
- checkQueue(queue, 1, 1); |
- |
- queue.addLast(10); |
- Expect.equals(1, queue.removeFirst()); |
- checkQueue(queue, 1, 10); |
- |
- queue.addFirst(1); |
- queue.addLast(100); |
- queue.addLast(1000); |
- Expect.equals(1000, queue.removeLast()); |
- queue.addLast(1000); |
- checkQueue(queue, 4, 1111); |
- |
- queue.removeFirst(); |
- checkQueue(queue, 3, 1110); |
- |
- int mapTest(int value) { |
- return value ~/ 10; |
- } |
- |
- bool is10(int value) { |
- return (value == 10); |
- } |
- |
- Queue mapped = newQueueFrom(queue.map(mapTest)); |
- checkQueue(mapped, 3, 111); |
- checkQueue(queue, 3, 1110); |
- Expect.equals(1, mapped.removeFirst()); |
- Expect.equals(100, mapped.removeLast()); |
- Expect.equals(10, mapped.removeFirst()); |
- |
- Queue other = newQueueFrom(queue.where(is10)); |
- checkQueue(other, 1, 10); |
- |
- Expect.equals(true, queue.any(is10)); |
- |
- bool isInstanceOfInt(int value) { |
- return (value is int); |
- } |
- |
- Expect.equals(true, queue.every(isInstanceOfInt)); |
- |
- Expect.equals(false, queue.every(is10)); |
- |
- bool is1(int value) { |
- return (value == 1); |
- } |
- |
- Expect.equals(false, queue.any(is1)); |
- |
- queue.clear(); |
- Expect.equals(0, queue.length); |
- |
- var exception = null; |
- try { |
- queue.removeFirst(); |
- } on StateError catch (e) { |
- exception = e; |
- } |
- Expect.equals(true, exception != null); |
- Expect.equals(0, queue.length); |
- |
- exception = null; |
- try { |
- queue.removeLast(); |
- } on StateError catch (e) { |
- exception = e; |
- } |
- Expect.equals(true, exception != null); |
- Expect.equals(0, queue.length); |
- |
- queue.addFirst(1); |
- queue.addFirst(2); |
- Expect.equals(2, queue.first); |
- Expect.equals(1, queue.last); |
- |
- queue.addLast(3); |
- Expect.equals(3, queue.last); |
- bool isGreaterThanOne(int value) { |
- return (value > 1); |
- } |
- |
- other = newQueueFrom(queue.where(isGreaterThanOne)); |
- checkQueue(other, 2, 5); |
- |
- // Cycle through values without ever having large element count. |
- queue = newQueue(); |
- queue.add(0); |
- for (int i = 0; i < 255; i++) { |
- queue.add(i + 1); |
- Expect.equals(i, queue.removeFirst()); |
- } |
- Expect.equals(255, queue.removeFirst()); |
- Expect.isTrue(queue.isEmpty); |
- |
- testAddAll(); |
- testLengthChanges(); |
- testLarge(); |
- testFromListToList(); |
- } |
- |
- void checkQueue(Queue queue, int expectedSize, int expectedSum) { |
- testLength(expectedSize, queue); |
- int sum = 0; |
- void sumElements(int value) { |
- sum += value; |
- } |
- |
- queue.forEach(sumElements); |
- Expect.equals(expectedSum, sum); |
- } |
- |
- testLength(int length, Queue queue) { |
- Expect.equals(length, queue.length); |
- ((length == 0) ? Expect.isTrue : Expect.isFalse)(queue.isEmpty); |
- ((length != 0) ? Expect.isTrue : Expect.isFalse)(queue.isNotEmpty); |
- } |
- |
- void testAddAll() { |
- Set<int> set = new Set<int>.from([1, 2, 4]); |
- Expect.equals(3, set.length); |
- |
- Queue queue1 = newQueueFrom(set); |
- Queue queue2 = newQueue(); |
- Queue queue3 = newQueue(); |
- testLength(3, queue1); |
- testLength(0, queue2); |
- testLength(0, queue3); |
- |
- queue2.addAll(set); |
- testLength(3, queue2); |
- |
- queue3.addAll(queue1); |
- testLength(3, queue3); |
- |
- int sum = 0; |
- void f(e) { |
- sum += e; |
- } |
- |
- ; |
- |
- set.forEach(f); |
- Expect.equals(7, sum); |
- sum = 0; |
- |
- queue1.forEach(f); |
- Expect.equals(7, sum); |
- sum = 0; |
- |
- queue2.forEach(f); |
- Expect.equals(7, sum); |
- sum = 0; |
- |
- queue3.forEach(f); |
- Expect.equals(7, sum); |
- sum = 0; |
- |
- set = new Set<int>.from([]); |
- queue1 = newQueueFrom(set); |
- queue2 = newQueue(); |
- queue3 = newQueue(); |
- |
- queue2.addAll(set); |
- queue3.addAll(queue1); |
- |
- Expect.equals(0, set.length); |
- Expect.equals(0, queue1.length); |
- Expect.equals(0, queue2.length); |
- Expect.equals(0, queue3.length); |
- } |
- |
- void testLengthChanges() { |
- // Test that the length property is updated properly by |
- // modifications; |
- Queue queue = newQueue(); |
- testLength(0, queue); |
- |
- for (int i = 1; i <= 10; i++) { |
- queue.add(i); |
- testLength(i, queue); |
- } |
- |
- for (int i = 1; i <= 10; i++) { |
- queue.addFirst(11 - i); |
- testLength(10 + i, queue); |
- } |
- |
- for (int i = 1; i <= 10; i++) { |
- queue.addLast(i); |
- testLength(20 + i, queue); |
- } |
- |
- queue.addAll([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); |
- testLength(40, queue); |
- |
- for (int i = 1; i <= 5; i++) { |
- Expect.equals(i, queue.removeFirst()); |
- testLength(40 - i, queue); |
- } |
- |
- for (int i = 1; i <= 5; i++) { |
- Expect.equals(11 - i, queue.removeLast()); |
- testLength(35 - i, queue); |
- } |
- |
- Expect.isTrue(queue.remove(10)); |
- testLength(29, queue); |
- Expect.isFalse(queue.remove(999)); |
- testLength(29, queue); |
- |
- queue.removeWhere((x) => x == 7); |
- testLength(26, queue); |
- |
- queue.retainWhere((x) => x != 3); |
- testLength(23, queue); |
- |
- Expect.listEquals( |
- [6, 8, 9, 1, 2, 4, 5, 6, 8, 9, 10, 1, 2, 4, 5, 6, 8, 9, 10, 1, 2, 4, 5], |
- queue.toList()); |
- |
- // Regression test: http://dartbug.com/16270 |
- // These should all do nothing, and should not throw. |
- Queue emptyQueue = newQueue(); |
- emptyQueue.remove(0); |
- emptyQueue.removeWhere((x) => null); |
- emptyQueue.retainWhere((x) => null); |
- } |
- |
- void testLarge() { |
- int N = 10000; |
- Set set = new Set(); |
- |
- Queue queue = newQueue(); |
- Expect.isTrue(queue.isEmpty); |
- |
- for (int i = 0; i < N; i++) { |
- queue.add(i); |
- set.add(i); |
- } |
- Expect.equals(N, queue.length); |
- Expect.isFalse(queue.isEmpty); |
- |
- Expect.equals(0, queue.elementAt(0)); |
- Expect.equals(N - 1, queue.elementAt(N - 1)); |
- Expect.throws(() { |
- queue.elementAt(-1); |
- }); |
- Expect.throws(() { |
- queue.elementAt(N); |
- }); |
- |
- Iterable skip1 = queue.skip(1); |
- Iterable take1 = queue.take(1); |
- Iterable mapped = queue.map((e) => -e); |
- |
- for (int i = 0; i < 500; i++) { |
- Expect.equals(i, take1.first); |
- Expect.equals(i, queue.first); |
- Expect.equals(-i, mapped.first); |
- Expect.equals(i + 1, skip1.first); |
- Expect.equals(i, queue.removeFirst()); |
- Expect.equals(i + 1, take1.first); |
- Expect.equals(-i - 1, mapped.first); |
- Expect.equals(N - 1 - i, queue.last); |
- Expect.equals(N - 1 - i, queue.removeLast()); |
- } |
- Expect.equals(N - 1000, queue.length); |
- |
- Expect.isTrue(queue.remove(N >> 1)); |
- Expect.equals(N - 1001, queue.length); |
- |
- queue.clear(); |
- Expect.equals(0, queue.length); |
- Expect.isTrue(queue.isEmpty); |
- |
- queue.addAll(set); |
- Expect.equals(N, queue.length); |
- Expect.isFalse(queue.isEmpty); |
- |
- // Iterate. |
- for (var element in queue) { |
- Expect.isTrue(set.contains(element)); |
- } |
- |
- queue.forEach((element) { |
- Expect.isTrue(set.contains(element)); |
- }); |
- |
- queue.addAll(set); |
- Expect.equals(N * 2, queue.length); |
- Expect.isFalse(queue.isEmpty); |
- |
- queue.clear(); |
- Expect.equals(0, queue.length); |
- Expect.isTrue(queue.isEmpty); |
- } |
- |
- void testFromListToList() { |
- const int N = 256; |
- List list = []; |
- for (int i = 0; i < N; i++) { |
- Queue queue = newQueueFrom(list); |
- |
- Expect.equals(list.length, queue.length); |
- List to = queue.toList(); |
- Expect.listEquals(list, to); |
- |
- queue.add(i); |
- list.add(i); |
- Expect.equals(list.length, queue.length); |
- to = queue.toList(); |
- Expect.listEquals(list, to); |
- } |
- } |
-} |
- |
-class ListQueueTest extends QueueTest { |
- Queue newQueue() => new ListQueue(); |
- Queue newQueueFrom(Iterable elements) => new ListQueue.from(elements); |
- |
- void testMain() { |
- super.testMain(); |
- trickyTest(); |
- } |
- |
- void trickyTest() { |
- // Test behavior around the know growing capacities of a ListQueue. |
- Queue q = new ListQueue(); |
- |
- for (int i = 0; i < 255; i++) { |
- q.add(i); |
- } |
- for (int i = 0; i < 128; i++) { |
- Expect.equals(i, q.removeFirst()); |
- } |
- q.add(255); |
- for (int i = 0; i < 127; i++) { |
- q.add(i); |
- } |
- |
- Expect.equals(255, q.length); |
- |
- // Remove element at end of internal buffer. |
- q.removeWhere((v) => v == 255); |
- // Remove element at beginning of internal buffer. |
- q.removeWhere((v) => v == 0); |
- // Remove element at both ends of internal buffer. |
- q.removeWhere((v) => v == 254 || v == 1); |
- |
- Expect.equals(251, q.length); |
- |
- Iterable i255 = new Iterable.generate(255, (x) => x); |
- |
- q = new ListQueue(); |
- q.addAll(i255); |
- Expect.listEquals(i255.toList(), q.toList()); |
- |
- q = new ListQueue(); |
- q.addAll(i255.toList()); |
- Expect.listEquals(i255.toList(), q.toList()); |
- |
- q = new ListQueue.from(i255); |
- for (int i = 0; i < 128; i++) q.removeFirst(); |
- q.add(256); |
- q.add(0); |
- q.addAll(i255.toList()); |
- Expect.equals(129 + 255, q.length); |
- |
- // Test addAll that requires the queue to grow. |
- q = new ListQueue(); |
- q.addAll(i255.take(35)); |
- q.addAll(i255.skip(35).take(96)); |
- q.addAll(i255.skip(35 + 96)); |
- Expect.listEquals(i255.toList(), q.toList()); |
- } |
-} |
- |
-class DoubleLinkedQueueTest extends QueueTest { |
- Queue newQueue() => new DoubleLinkedQueue(); |
- Queue newQueueFrom(Iterable elements) => new DoubleLinkedQueue.from(elements); |
- |
- void testMain() { |
- super.testMain(); |
- testQueueElements(); |
- } |
- |
- void testQueueElements() { |
- DoubleLinkedQueue<int> queue1 = new DoubleLinkedQueue<int>.from([1, 2, 3]); |
- DoubleLinkedQueue<int> queue2 = new DoubleLinkedQueue<int>(); |
- queue2.addAll(queue1); |
- |
- Expect.equals(queue1.length, queue2.length); |
- DoubleLinkedQueueEntry<int> entry1 = queue1.firstEntry(); |
- DoubleLinkedQueueEntry<int> entry2 = queue2.firstEntry(); |
- while (entry1 != null) { |
- Expect.equals(true, !identical(entry1, entry2)); |
- entry1 = entry1.nextEntry(); |
- entry2 = entry2.nextEntry(); |
- } |
- Expect.equals(null, entry2); |
- |
- var firstEntry = queue1.firstEntry(); |
- var secondEntry = queue1.firstEntry().nextEntry(); |
- var thirdEntry = queue1.lastEntry(); |
- firstEntry.prepend(4); |
- firstEntry.append(5); |
- secondEntry.prepend(6); |
- secondEntry.append(7); |
- thirdEntry.prepend(8); |
- thirdEntry.append(9); |
- Expect.equals(9, queue1.length); |
- Expect.listEquals(queue1.toList(), [4, 1, 5, 6, 2, 7, 8, 3, 9]); |
- Expect.equals(1, firstEntry.remove()); |
- Expect.equals(2, secondEntry.remove()); |
- Expect.equals(3, thirdEntry.remove()); |
- Expect.equals(6, queue1.length); |
- Expect.listEquals(queue1.toList(), [4, 5, 6, 7, 8, 9]); |
- } |
-} |
- |
-void linkEntryTest() { |
- var entry = new DoubleLinkedQueueEntry(42); |
- Expect.equals(null, entry.previousEntry()); |
- Expect.equals(null, entry.nextEntry()); |
- |
- entry.append(37); |
- entry.prepend(87); |
- var prev = entry.previousEntry(); |
- var next = entry.nextEntry(); |
- Expect.equals(42, entry.element); |
- Expect.equals(37, next.element); |
- Expect.equals(87, prev.element); |
- Expect.identical(entry, prev.nextEntry()); |
- Expect.identical(entry, next.previousEntry()); |
- Expect.equals(null, next.nextEntry()); |
- Expect.equals(null, prev.previousEntry()); |
- |
- entry.element = 117; |
- Expect.equals(117, entry.element); |
- Expect.identical(next, entry.nextEntry()); |
- Expect.identical(prev, entry.previousEntry()); |
- |
- Expect.equals(117, entry.remove()); |
- Expect.identical(next, prev.nextEntry()); |
- Expect.identical(prev, next.previousEntry()); |
- Expect.equals(null, next.nextEntry()); |
- Expect.equals(null, prev.previousEntry()); |
- Expect.equals(37, next.element); |
- Expect.equals(87, prev.element); |
- |
- Expect.equals(37, next.remove()); |
- Expect.equals(87, prev.element); |
- Expect.equals(null, prev.nextEntry()); |
- Expect.equals(null, prev.previousEntry()); |
- |
- Expect.equals(87, prev.remove()); |
-} |
- |
-main() { |
- new DoubleLinkedQueueTest().testMain(); |
- new ListQueueTest().testMain(); |
- linkEntryTest(); |
-} |