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