| // Copyright (c) 2020, 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:current_results/src/iterable.dart'; |
| |
| int intIdentity(int i) => i; |
| |
| void main() { |
| test('merge int lists', () { |
| final a = [1, 2, 4]; |
| final b = [3]; |
| final c = [2, 5]; |
| final empty = <int>[]; |
| expect(merge(a, b, intIdentity), [1, 2, 3, 4]); |
| expect(merge(a, c, intIdentity), [1, 2, 2, 4, 5]); |
| expect(merge(b, b, intIdentity), [3, 3]); |
| expect(merge(c, c, intIdentity), [2, 2, 5, 5]); |
| expect(merge(empty, empty, intIdentity), []); |
| expect(merge<int, int>([], [], intIdentity), []); |
| expect(merge(a, empty, intIdentity), a); |
| expect(merge(b, empty, intIdentity), b); |
| expect(merge(empty, a, intIdentity), a); |
| expect(merge(empty, b, intIdentity), b); |
| }); |
| |
| test('merge map lists', () { |
| final a = [ |
| {'x': 1, 'y': 9}, |
| {'x': 2}, |
| {'x': 4} |
| ]; |
| final b = [ |
| {'x': 3, 'y': 8} |
| ]; |
| final c = [ |
| {'x': 2, 'y': 7}, |
| {'x': 5} |
| ]; |
| final empty = <Map<String, int>>[]; |
| |
| int xField(Map<String, int> map) => map['x']; |
| expect(merge(a, b, xField), [ |
| {'x': 1, 'y': 9}, |
| {'x': 2}, |
| {'x': 3, 'y': 8}, |
| {'x': 4}, |
| ]); |
| expect(merge(a, c, xField), [ |
| {'x': 1, 'y': 9}, |
| {'x': 2}, |
| {'x': 2, 'y': 7}, |
| {'x': 4}, |
| {'x': 5}, |
| ]); |
| expect(merge(b, b, xField), [ |
| {'x': 3, 'y': 8}, |
| {'x': 3, 'y': 8}, |
| ]); |
| expect(merge(c, c, xField), [ |
| {'x': 2, 'y': 7}, |
| {'x': 2, 'y': 7}, |
| {'x': 5}, |
| {'x': 5}, |
| ]); |
| expect(merge(empty, empty, xField), []); |
| expect(merge<Map<String, int>, int>([], [], xField), []); |
| expect(merge(a, empty, xField), a); |
| expect(merge(b, empty, xField), b); |
| expect(merge(empty, a, xField), a); |
| expect(merge(empty, b, xField), b); |
| }); |
| |
| test("Iterable from Iterator", () { |
| final a = [ |
| 1, |
| 2, |
| 4, |
| ]; |
| expect(a.iterator.iterable, a); |
| expect((a.iterator..moveNext()).iterable, a.skip(1)); |
| expect([].iterator.iterable, []); |
| expect(() => a.iterator.iterable..toList()..toList(), throwsStateError); |
| expect(a.getRange(1, 2).iterator.iterable.single, 2); |
| expect(a.iterator.iterable.iterator.iterable, a); |
| final m = {'x': 1, 'y': 2}; |
| expect(m.keys.iterator.iterable, ['x', 'y']); |
| Iterable<Map<String, int>> unbounded() sync* { |
| for (;;) yield m; |
| } |
| |
| expect(unbounded().iterator.iterable.take(2), [m, m]); |
| expect(a.iterator.iterable.length, 3); // hasLength matcher can't be used. |
| expect((() sync* { |
| yield* a.iterator.iterable; |
| })(), a); |
| }); |
| } |