Index: packages/collection/test/iterable_zip_test.dart |
diff --git a/packages/collection/test/iterable_zip_test.dart b/packages/collection/test/iterable_zip_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cc8ac76f03685d3b307add6266dc0c77b14a9fb6 |
--- /dev/null |
+++ b/packages/collection/test/iterable_zip_test.dart |
@@ -0,0 +1,112 @@ |
+// Copyright (c) 2013, 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 "dart:collection"; |
+import "package:collection/iterable_zip.dart"; |
+import "package:test/test.dart"; |
+ |
+/// Iterable like [base] except that it throws when value equals [errorValue]. |
+Iterable iterError(Iterable base, int errorValue) { |
+ return base.map((x) => x == errorValue ? throw "BAD" : x); |
+} |
+ |
+main() { |
+ test("Basic", () { |
+ expect(new IterableZip([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), |
+ equals([[1, 4, 7], [2, 5, 8], [3, 6, 9]])); |
+ }); |
+ |
+ test("Uneven length 1", () { |
+ expect(new IterableZip([[1, 2, 3, 99, 100], [4, 5, 6], [7, 8, 9]]), |
+ equals([[1, 4, 7], [2, 5, 8], [3, 6, 9]])); |
+ }); |
+ |
+ test("Uneven length 2", () { |
+ expect(new IterableZip([[1, 2, 3], [4, 5, 6, 99, 100], [7, 8, 9]]), |
+ equals([[1, 4, 7], [2, 5, 8], [3, 6, 9]])); |
+ }); |
+ |
+ test("Uneven length 3", () { |
+ expect(new IterableZip([[1, 2, 3], [4, 5, 6], [7, 8, 9, 99, 100]]), |
+ equals([[1, 4, 7], [2, 5, 8], [3, 6, 9]])); |
+ }); |
+ |
+ test("Uneven length 3", () { |
+ expect(new IterableZip([[1, 2, 3, 98], [4, 5, 6], [7, 8, 9, 99, 100]]), |
+ equals([[1, 4, 7], [2, 5, 8], [3, 6, 9]])); |
+ }); |
+ |
+ test("Empty 1", () { |
+ expect(new IterableZip([[], [4, 5, 6], [7, 8, 9]]), equals([])); |
+ }); |
+ |
+ test("Empty 2", () { |
+ expect(new IterableZip([[1, 2, 3], [], [7, 8, 9]]), equals([])); |
+ }); |
+ |
+ test("Empty 3", () { |
+ expect(new IterableZip([[1, 2, 3], [4, 5, 6], []]), equals([])); |
+ }); |
+ |
+ test("Empty source", () { |
+ expect(new IterableZip([]), equals([])); |
+ }); |
+ |
+ test("Single Source", () { |
+ expect(new IterableZip([[1, 2, 3]]), equals([[1], [2], [3]])); |
+ }); |
+ |
+ test("Not-lists", () { |
+ // Use other iterables than list literals. |
+ Iterable it1 = [1, 2, 3, 4, 5, 6].where((x) => x < 4); |
+ Set it2 = new LinkedHashSet()..add(4)..add(5)..add(6); |
+ Iterable it3 = (new LinkedHashMap()..[7] = 0 ..[8] = 0 ..[9] = 0).keys; |
+ Iterable<Iterable> allIts = |
+ new Iterable.generate(3, (i) => [it1, it2, it3][i]); |
+ expect(new IterableZip(allIts), |
+ equals([[1, 4, 7], [2, 5, 8], [3, 6, 9]])); |
+ }); |
+ |
+ test("Error 1", () { |
+ expect(() => new IterableZip([iterError([1, 2, 3], 2), |
+ [4, 5, 6], |
+ [7, 8, 9]]).toList(), |
+ throwsA(equals("BAD"))); |
+ }); |
+ |
+ test("Error 2", () { |
+ expect(() => new IterableZip([[1, 2, 3], |
+ iterError([4, 5, 6], 5), |
+ [7, 8, 9]]).toList(), |
+ throwsA(equals("BAD"))); |
+ }); |
+ |
+ test("Error 3", () { |
+ expect(() => new IterableZip([[1, 2, 3], |
+ [4, 5, 6], |
+ iterError([7, 8, 9], 8)]).toList(), |
+ throwsA(equals("BAD"))); |
+ }); |
+ |
+ test("Error at end", () { |
+ expect(() => new IterableZip([[1, 2, 3], |
+ iterError([4, 5, 6], 6), |
+ [7, 8, 9]]).toList(), |
+ throwsA(equals("BAD"))); |
+ }); |
+ |
+ test("Error before first end", () { |
+ expect(() => new IterableZip([iterError([1, 2, 3, 4], 4), |
+ [4, 5, 6], |
+ [7, 8, 9]]).toList(), |
+ throwsA(equals("BAD"))); |
+ }); |
+ |
+ test("Error after first end", () { |
+ expect(new IterableZip([[1, 2, 3], |
+ [4, 5, 6], |
+ iterError([7, 8, 9, 10], 10)]), |
+ equals([[1, 4, 7], [2, 5, 8], [3, 6, 9]])); |
+ }); |
+} |