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

Unified Diff: tests/corelib/list_test.dart

Issue 14425003: Make List.remove return boolean. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sdk/lib/web_sql/dartium/web_sql_dartium.dart ('k') | tests/corelib/queue_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/corelib/list_test.dart
diff --git a/tests/corelib/list_test.dart b/tests/corelib/list_test.dart
index 932d4caba15a0b3903c891ca1bc24f13cb55c754..7897651116d6bd3b3aa8868031dddba2965e0bea 100644
--- a/tests/corelib/list_test.dart
+++ b/tests/corelib/list_test.dart
@@ -3,77 +3,137 @@
// BSD-style license that can be found in the LICENSE file.
import "dart:collection";
+import "dart:typeddata";
import "package:expect/expect.dart";
void main() {
+ // Fixed length lists, length 4.
testFixedLengthList(new List(4));
+ testFixedLengthList(new List(4).toList(growable: false));
+ testFixedLengthList((new List()..length = 4).toList(growable: false));
// ListBase implementation of List.
testFixedLengthList(new MyFixedList(new List(4)));
+ testFixedLengthList(new MyFixedList(new List(4)).toList(growable: false));
+
+ testTypedList(new Uint8List(4));
+ testTypedList(new Int8List(4));
+ testTypedList(new Uint16List(4));
+ testTypedList(new Int16List(4));
+ testTypedList(new Uint32List(4));
+ testTypedList(new Int32List(4));
+
+ // Growable lists. Initial length 0.
testGrowableList(new List());
+ testGrowableList(new List().toList());
+ testGrowableList(new List(0).toList());
testGrowableList([]);
+ testGrowableList((const []).toList());
testGrowableList(new MyList([]));
+ testGrowableList(new MyList([]).toList());
}
-void expectValues(list, val1, val2, val3, val4) {
- Expect.isFalse(list.isEmpty);
- Expect.equals(4, list.length);
- Expect.equals(list[0], val1);
- Expect.equals(list[1], val2);
- Expect.equals(list[2], val3);
- Expect.equals(list[3], val4);
-}
-
-void testClosures(List list) {
- testMap(val) {return val * 2 + 10; }
- List mapped = list.map(testMap).toList();
- Expect.equals(mapped.length, list.length);
- for (var i = 0; i < list.length; i++) {
- Expect.equals(mapped[i], list[i]*2 + 10);
- }
-
- testFilter(val) { return val == 3; }
- Iterable filtered = list.where(testFilter);
- Expect.equals(filtered.length, 1);
-
- testEvery(val) { return val != 11; }
- bool test = list.every(testEvery);
- Expect.isTrue(test);
-
- testSome(val) { return val == 1; }
- test = list.any(testSome);
- Expect.isTrue(test);
-
- testSomeFirst(val) { return val == 0; }
- test = list.any(testSomeFirst);
- Expect.isTrue(test);
-
- testSomeLast(val) { return val == (list.length - 1); }
- test = list.any(testSomeLast);
- Expect.isTrue(test);
+void testLength(int length, List list) {
+ Expect.equals(length, list.length);
+ (length == 0 ? Expect.isTrue : Expect.isFalse)(list.isEmpty);
}
-void testFixedLengthList(List list) {
+void testTypedLengthInvariantOperations(List list) {
+ // length
Expect.equals(list.length, 4);
+ // operators [], []=.
+ for (int i = 0; i < 4; i++) list[i] = 0;
list[0] = 4;
- expectValues(list, 4, null, null, null);
- String val = "fisk";
- list[1] = val;
- expectValues(list, 4, val, null, null);
- double d = 2.0;
- list[3] = d;
- expectValues(list, 4, val, null, d);
+ Expect.listEquals([4, 0, 0, 0], list);
+ list[1] = 7;
+ Expect.listEquals([4, 7, 0, 0], list);
+ list[3] = 2;
+ Expect.listEquals([4, 7, 0, 2], list);
for (int i = 0; i < list.length; i++) {
list[i] = i;
}
+ // indexOf, lastIndexOf
for (int i = 0; i < 4; i++) {
Expect.equals(i, list[i]);
Expect.equals(i, list.indexOf(i));
Expect.equals(i, list.lastIndexOf(i));
}
+ // setRange.
+ list.setRange(0, 4, [3, 2, 1, 0]);
+ Expect.listEquals([3, 2, 1, 0], list);
+
+ list.setRange(1, 4, list);
+ Expect.listEquals([3, 3, 2, 1], list);
+
+ list.setRange(0, 3, list, 1);
+ Expect.listEquals([3, 2, 1, 1], list);
+ list.setRange(0, 3, list, 1);
+ Expect.listEquals([2, 1, 1, 1], list);
+
+ list.setRange(2, 4, list, 0);
+ Expect.listEquals([2, 1, 2, 1], list);
+
+ // setAll.
+ list.setAll(0, [3, 2, 0, 1]);
+ Expect.listEquals([3, 2, 0, 1], list);
+ list.setAll(1, [0, 1]);
+ Expect.listEquals([3, 0, 1, 1], list);
+
+ // sort.
+ list.setRange(0, 4, [3, 2, 1, 0]);
+ list.sort();
+ Expect.listEquals([0, 1, 2, 3], list);
+ list.setRange(0, 4, [1, 2, 3, 0]);
+ list.sort();
+ Expect.listEquals([0, 1, 2, 3], list);
+ list.setRange(0, 4, [1, 3, 0, 2]);
+ list.sort((a, b) => b - a); // reverse compare.
+ Expect.listEquals([3, 2, 1, 0], list);
+ list.setRange(0, 4, [1, 2, 3, 0]);
+ list.sort((a, b) => b - a);
+ Expect.listEquals([3, 2, 1, 0], list);
+
+ // Some Iterable methods.
+
+ list.setRange(0, 4, [0, 1, 2, 3]);
+ // map.
+ testMap(val) {return val * 2 + 10; }
+ List mapped = list.map(testMap).toList();
+ Expect.equals(mapped.length, list.length);
+ for (var i = 0; i < list.length; i++) {
+ Expect.equals(mapped[i], list[i] * 2 + 10);
+ }
+
+ matchAll(val) => true;
+ matchSome(val) { return (val == 1 || val == 2); }
+ matchSomeFirst(val) { return val == 0; }
+ matchSomeLast(val) { return val == 3; }
+ matchNone(val) => false;
+
+ // where.
+ Iterable filtered = list.where(matchSome);
+ Expect.equals(filtered.length, 2);
+
+ // every
+ Expect.isTrue(list.every(matchAll));
+ Expect.isFalse(list.every(matchSome));
+ Expect.isFalse(list.every(matchNone));
+
+ // any
+ Expect.isTrue(list.any(matchAll));
+ Expect.isTrue(list.any(matchSome));
+ Expect.isTrue(list.any(matchSomeFirst));
+ Expect.isTrue(list.any(matchSomeLast));
+ Expect.isFalse(list.any(matchNone));
+}
+
+void testLengthInvariantOperations(List list) {
+ testTypedLengthInvariantOperations(list);
+ // Tests that need untyped lists.
+ list.setAll(0, [0, 1, 2, 3]);
Expect.equals(-1, list.indexOf(100));
Expect.equals(-1, list.lastIndexOf(100));
list[2] = new Yes();
@@ -89,54 +149,156 @@ void testFixedLengthList(List list) {
Expect.equals(-1, list.indexOf(100));
Expect.equals(-1, list.lastIndexOf(100));
- testClosures(list);
+}
+
+void testTypedList(List list) {
+ testTypedLengthInvariantOperations(list);
+ testCannotChangeLength(list);
+}
- Expect.throws(list.clear, (e) => e is UnsupportedError);
+void testFixedLengthList(List list) {
+ testLengthInvariantOperations(list);
+ testCannotChangeLength(list);
+}
+
+void testCannotChangeLength(List list) {
+ isUnsupported(action()) {
+ Expect.throws(action, (e) => e is UnsupportedError);
+ }
+ isUnsupported(() => list.add(0));
+ isUnsupported(() => list.addAll([0]));
+ isUnsupported(() => list.removeLast());
+ isUnsupported(() => list.insert(0, 1));
+ isUnsupported(() => list.insertAll(0, [1]));
+ isUnsupported(() => list.clear());
+ isUnsupported(() => list.remove(1));
+ isUnsupported(() => list.removeAt(1));
+ isUnsupported(() => list.removeRange(0, 1));
+ isUnsupported(() => list.replaceRange(0, 1, []));
}
void testGrowableList(List list) {
- Expect.isTrue(list.isEmpty);
- Expect.equals(list.length, 0);
+ testLength(0, list);
+ // set length.
+ list.length = 4;
+ testLength(4, list);
+
+ testLengthInvariantOperations(list);
+
+ // add, removeLast.
+ list.clear();
+ testLength(0, list);
list.add(4);
- Expect.equals(1, list.length);
- Expect.isTrue(!list.isEmpty);
- Expect.equals(list.length, 1);
- Expect.equals(list.length, 1);
- Expect.equals(list.removeLast(), 4);
+ testLength(1, list);
+ Expect.equals(4, list.removeLast());
+ testLength(0, list);
- for (int i = 0; i < 10; i++) {
+ for (int i = 0; i < 100; i++) {
list.add(i);
}
- Expect.equals(list.length, 10);
- for (int i = 0; i < 10; i++) {
+ Expect.equals(list.length, 100);
+ for (int i = 0; i < 100; i++) {
Expect.equals(i, list[i]);
- Expect.equals(i, list.indexOf(i));
- Expect.equals(i, list.lastIndexOf(i));
}
- Expect.equals(-1, list.indexOf(100));
- Expect.equals(-1, list.lastIndexOf(100));
- list[2] = new Yes();
- Expect.equals(2, list.indexOf(100));
- Expect.equals(2, list.lastIndexOf(100));
- list[3] = new Yes();
- Expect.equals(2, list.indexOf(100));
- Expect.equals(3, list.lastIndexOf(100));
- list[2] = 2;
- Expect.equals(3, list.indexOf(100));
- Expect.equals(3, list.lastIndexOf(100));
- list[3] = 3;
- Expect.equals(-1, list.indexOf(100));
- Expect.equals(-1, list.lastIndexOf(100));
+ Expect.equals(17, list.indexOf(17));
+ Expect.equals(17, list.lastIndexOf(17));
+ Expect.equals(-1, list.indexOf(999));
+ Expect.equals(-1, list.lastIndexOf(999));
- testClosures(list);
+ Expect.equals(99, list.removeLast());
+ testLength(99, list);
- Expect.equals(9, list.removeLast());
+ // remove.
+ Expect.isTrue(list.remove(4));
+ testLength(98, list);
+ Expect.isFalse(list.remove(4));
+ testLength(98, list);
list.clear();
- Expect.equals(0, list.length);
- Expect.isTrue(list.isEmpty);
-}
+ testLength(0, list);
+
+ list.add(4);
+ list.add(4);
+ testLength(2, list);
+ Expect.isTrue(list.remove(4));
+ testLength(1, list);
+ Expect.isTrue(list.remove(4));
+ testLength(0, list);
+ Expect.isFalse(list.remove(4));
+ testLength(0, list);
+
+ // removeWhere, retainWhere
+ for (int i = 0; i < 100; i++) {
+ list.add(i);
+ }
+ testLength(100, list);
+ list.removeWhere((int x) => x.isOdd);
+ testLength(50, list);
+ for (int i = 0; i < list.length; i++) {
+ Expect.isTrue(list[i].isEven);
+ }
+ list.retainWhere((int x) => (x % 3) == 0);
+ testLength(17, list);
+ for (int i = 0; i < list.length; i++) {
+ Expect.isTrue((list[i] % 6) == 0);
+ }
+
+ // insert, remove, removeAt
+ list.clear();
+ testLength(0, list);
+
+ list.insert(0, 0);
+ Expect.listEquals([0], list);
+
+ list.insert(0, 1);
+ Expect.listEquals([1, 0], list);
+
+ list.insert(0, 2);
+ Expect.listEquals([2, 1, 0], list);
+
+ Expect.isTrue(list.remove(1));
+ Expect.listEquals([2, 0], list);
+
+ list.insert(1, 1);
+ Expect.listEquals([2, 1, 0], list);
+
+ list.removeAt(1);
+ Expect.listEquals([2, 0], list);
+
+ list.removeAt(1);
+ Expect.listEquals([2], list);
+
+ // insertAll
+ list.insertAll(0, [1, 2, 3]);
+ Expect.listEquals([1, 2, 3, 2], list);
+
+ list.insertAll(2, []);
+ Expect.listEquals([1, 2, 3, 2], list);
+
+ list.insertAll(4, [7, 9]);
+ Expect.listEquals([1, 2, 3, 2, 7, 9], list);
+
+ // addAll
+ list.addAll(list.reversed.toList());
+ Expect.listEquals([1, 2, 3, 2, 7, 9, 9, 7, 2, 3, 2, 1], list);
+
+ list.addAll([]);
+ Expect.listEquals([1, 2, 3, 2, 7, 9, 9, 7, 2, 3, 2, 1], list);
+
+ // replaceRange
+ list.replaceRange(3, 7, [0, 0]);
+ Expect.listEquals([1, 2, 3, 0, 0, 7, 2, 3, 2, 1], list);
+
+ list.replaceRange(2, 3, [5, 5, 5]);
+ Expect.listEquals([1, 2, 5, 5, 5, 0, 0, 7, 2, 3, 2, 1], list);
+
+ list.replaceRange(2, 4, [6, 6]);
+ Expect.listEquals([1, 2, 6, 6, 5, 0, 0, 7, 2, 3, 2, 1], list);
+
+ list.replaceRange(6, 8, []);
+ Expect.listEquals([1, 2, 6, 6, 5, 0, 2, 3, 2, 1], list);
+ }
class Yes {
operator ==(var other) => true;
« no previous file with comments | « sdk/lib/web_sql/dartium/web_sql_dartium.dart ('k') | tests/corelib/queue_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698