blob: 3881c6af62687c0d58c76be2f85c0e3023b7d408 [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 'package:collection/collection.dart';
import 'package:test/test.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);
}
void main() {
test('Basic', () {
expect(
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(
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(
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(
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(
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(
IterableZip([
[],
[4, 5, 6],
[7, 8, 9]
]),
equals([]));
});
test('Empty 2', () {
expect(
IterableZip([
[1, 2, 3],
[],
[7, 8, 9]
]),
equals([]));
});
test('Empty 3', () {
expect(
IterableZip([
[1, 2, 3],
[4, 5, 6],
[]
]),
equals([]));
});
test('Empty source', () {
expect(IterableZip([]), equals([]));
});
test('Single Source', () {
expect(
IterableZip([
[1, 2, 3]
]),
equals([
[1],
[2],
[3]
]));
});
test('Not-lists', () {
// Use other iterables than list literals.
var it1 = [1, 2, 3, 4, 5, 6].where((x) => x < 4);
var it2 = {4, 5, 6};
var it3 = {7: 0, 8: 0, 9: 0}.keys;
var allIts = Iterable.generate(3, (i) => [it1, it2, it3][i]);
expect(
IterableZip(allIts),
equals([
[1, 4, 7],
[2, 5, 8],
[3, 6, 9]
]));
});
test('Error 1', () {
expect(
() => IterableZip([
iterError([1, 2, 3], 2),
[4, 5, 6],
[7, 8, 9]
]).toList(),
throwsA(equals('BAD')));
});
test('Error 2', () {
expect(
() => IterableZip([
[1, 2, 3],
iterError([4, 5, 6], 5),
[7, 8, 9]
]).toList(),
throwsA(equals('BAD')));
});
test('Error 3', () {
expect(
() => IterableZip([
[1, 2, 3],
[4, 5, 6],
iterError([7, 8, 9], 8)
]).toList(),
throwsA(equals('BAD')));
});
test('Error at end', () {
expect(
() => IterableZip([
[1, 2, 3],
iterError([4, 5, 6], 6),
[7, 8, 9]
]).toList(),
throwsA(equals('BAD')));
});
test('Error before first end', () {
expect(
() => IterableZip([
iterError([1, 2, 3, 4], 4),
[4, 5, 6],
[7, 8, 9]
]).toList(),
throwsA(equals('BAD')));
});
test('Error after first end', () {
expect(
IterableZip([
[1, 2, 3],
[4, 5, 6],
iterError([7, 8, 9, 10], 10)
]),
equals([
[1, 4, 7],
[2, 5, 8],
[3, 6, 9]
]));
});
}