Index: test/codegen/corelib/list_set_range_test.dart |
diff --git a/test/codegen/corelib/list_set_range_test.dart b/test/codegen/corelib/list_set_range_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..da8005238fafc070deb11e897aeca6d840024309 |
--- /dev/null |
+++ b/test/codegen/corelib/list_set_range_test.dart |
@@ -0,0 +1,98 @@ |
+// 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. |
+ |
+import "package:expect/expect.dart"; |
+ |
+main() { |
+ var list = []; |
+ list.setRange(0, 0, const []); |
+ list.setRange(0, 0, []); |
+ list.setRange(0, 0, const [], 1); |
+ list.setRange(0, 0, [], 1); |
+ Expect.equals(0, list.length); |
+ expectIOORE(() { list.setRange(0, 1, []); }); |
+ expectIOORE(() { list.setRange(0, 1, [], 1); }); |
+ expectIOORE(() { list.setRange(0, 1, [1], 0); }); |
+ |
+ list.add(1); |
+ list.setRange(0, 0, [], 0); |
+ Expect.equals(1, list.length); |
+ Expect.equals(1, list[0]); |
+ list.setRange(0, 0, const [], 0); |
+ Expect.equals(1, list.length); |
+ Expect.equals(1, list[0]); |
+ |
+ expectIOORE(() { list.setRange(0, 2, [1, 2]); }); |
+ Expect.equals(1, list.length); |
+ Expect.equals(1, list[0]); |
+ |
+ expectSE(() { list.setRange(0, 1, [1, 2], 2); }); |
+ Expect.equals(1, list.length); |
+ Expect.equals(1, list[0]); |
+ |
+ list.setRange(0, 1, [2], 0); |
+ Expect.equals(1, list.length); |
+ Expect.equals(2, list[0]); |
+ |
+ list.setRange(0, 1, const [3], 0); |
+ Expect.equals(1, list.length); |
+ Expect.equals(3, list[0]); |
+ |
+ list.addAll([4, 5, 6]); |
+ Expect.equals(4, list.length); |
+ list.setRange(0, 4, [1, 2, 3, 4]); |
+ Expect.listEquals([1, 2, 3, 4], list); |
+ |
+ list.setRange(2, 4, [5, 6, 7, 8]); |
+ Expect.listEquals([1, 2, 5, 6], list); |
+ |
+ expectIOORE(() { list.setRange(4, 5, [5, 6, 7, 8]); }); |
+ Expect.listEquals([1, 2, 5, 6], list); |
+ |
+ list.setRange(1, 3, [9, 10, 11, 12]); |
+ Expect.listEquals([1, 9, 10, 6], list); |
+ |
+ testNegativeIndices(); |
+ |
+ testNonExtendableList(); |
+} |
+ |
+void expectIOORE(Function f) { |
+ Expect.throws(f, (e) => e is RangeError); |
+} |
+ |
+void expectSE(Function f) { |
+ Expect.throws(f, (e) => e is StateError); |
+} |
+ |
+void expectAE(Function f) { |
+ Expect.throws(f, (e) => e is ArgumentError); |
+} |
+ |
+void testNegativeIndices() { |
+ var list = [1, 2]; |
+ expectIOORE(() { list.setRange(-1, 1, [1]); }); |
+ expectAE(() { list.setRange(0, 1, [1], -1); }); |
+ |
+ // A negative length throws an ArgumentError. |
+ expectIOORE(() { list.setRange(2, 1, [1]); }); |
+ |
+ expectAE(() { list.setRange(-1, -2, [1], -1); }); |
+ Expect.listEquals([1, 2], list); |
+ |
+ expectIOORE(() { list.setRange(-1, -1, [1]); }); |
+ Expect.listEquals([1, 2], list); |
+ |
+ // The skipCount is only used if the length is not 0. |
+ list.setRange(0, 0, [1], -1); |
+ Expect.listEquals([1, 2], list); |
+} |
+ |
+void testNonExtendableList() { |
+ var list = new List<int>(6); |
+ Expect.listEquals([null, null, null, null, null, null], list); |
+ list.setRange(0, 3, [1, 2, 3, 4]); |
+ list.setRange(3, 6, [1, 2, 3, 4]); |
+ Expect.listEquals([1, 2, 3, 1, 2, 3], list); |
+} |