blob: 64afb2b23ab44820785ed9ff3984713dac2e4cb9 [file] [log] [blame]
// 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);
});
}