2985f3462e
You can use new IterableZip([it1, it2, it3]) to generate an iterable of three-element lists, one from each source iterable, as long as all three source iterables have an element. Similar functionality for streams is provided by StreamZip. R=floitsch@google.com Review URL: https://codereview.chromium.org//18015002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24835 260f80e4-7a28-3924-810f-c04153c831b5
113 lines
3.6 KiB
Dart
113 lines
3.6 KiB
Dart
// 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:sequence_zip/iterable_zip.dart";
|
|
import "package:unittest/unittest.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]]));
|
|
});
|
|
}
|