| Index: tests/corelib/queue_test.dart
|
| diff --git a/tests/corelib/queue_test.dart b/tests/corelib/queue_test.dart
|
| index a269db9998a7a2c805dc03aff738de5a3b3e4bb7..2d443abcc4e938afd0232cb46e23091abe90c030 100644
|
| --- a/tests/corelib/queue_test.dart
|
| +++ b/tests/corelib/queue_test.dart
|
| @@ -131,20 +131,27 @@ abstract class QueueTest {
|
| Expect.equals(expectedSum, sum);
|
| }
|
|
|
| + testLength(int length, Queue queue) {
|
| + Expect.equals(length, queue.length);
|
| + ((length == 0) ? Expect.isTrue : Expect.isFalse)(queue.isEmpty);
|
| + }
|
| +
|
| 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);
|
| - queue3.addAll(queue1);
|
| + testLength(3, queue2);
|
|
|
| - Expect.equals(3, set.length);
|
| - Expect.equals(3, queue1.length);
|
| - Expect.equals(3, queue2.length);
|
| - Expect.equals(3, queue3.length);
|
| + queue3.addAll(queue1);
|
| + testLength(3, queue3);
|
|
|
| int sum = 0;
|
| void f(e) { sum += e; };
|
| @@ -179,6 +186,58 @@ abstract class QueueTest {
|
| 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(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);
|
| + }
|
| +
|
| + queue.remove(10);
|
| + testLength(29, queue);
|
| +
|
| + queue.removeAll([4, 6]);
|
| + testLength(23, queue);
|
| +
|
| + queue.retainAll([1, 3, 5, 7, 9, 10]); // Remove 2 and 8.
|
| + testLength(17, queue);
|
| +
|
| + queue.removeMatching((x) = x == 7);
|
| + testLength(14, queue);
|
| +
|
| + queue.retainMatching((x) = x != 3);
|
| + testLength(11, queue);
|
| +
|
| + Expect.listEquals([9, 1, 5, 9, 10, 1, 5, 9, 10, 1, 5], queue.toList());
|
| + }
|
| +
|
| void testLarge() {
|
| int N = 10000;
|
| Set set = new Set();
|
| @@ -262,6 +321,62 @@ abstract class QueueTest {
|
| 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.removeMatching((v) => v == 255);
|
| + // Remove element at beginning of internal buffer.
|
| + q.removeMatching((v) => v == 0);
|
| + // Remove element at both ends of internal buffer.
|
| + q.removeMatching((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 {
|
| @@ -290,58 +405,8 @@ class DoubleLinkedQueueTest extends QueueTest {
|
| }
|
| }
|
|
|
| -void trickyTest() {
|
| - 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.removeMatching((v) => v == 255);
|
| - // Remove element at beginning of internal buffer.
|
| - q.removeMatching((v) => v == 0);
|
| - // Remove element at both ends of internal buffer.
|
| - q.removeMatching((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());
|
| -}
|
|
|
| main() {
|
| new DoubleLinkedQueueTest().testMain();
|
| new ListQueueTest().testMain();
|
| - trickyTest();
|
| }
|
|
|