blob: 7b6db73b90cc12115b4935c5f7fdbfd91faec21f [file] [log] [blame]
// 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:test/test.dart";
import "package:collection/collection.dart";
/// Iterable like [base] except that it throws when value equals [errorValue].
Iterable iterError(Iterable base, int errorValue) {
// ignore: only_throw_errors
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]
]));
});
}