Files
sdk/pkg/sequence_zip/test/iterable_test.dart
T
lrn@google.com 2985f3462e Add package with iterable and stream "zipping" functionality.
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
2013-07-09 05:49:31 +00:00

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]]));
});
}