mirror of
https://github.com/dart-lang/sdk
synced 2024-09-18 21:51:18 +00:00
b101a7d002
Change-Id: Ib33169c3e0ffc870915c189404074a1dea472546 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196548 Reviewed-by: Bob Nystrom <rnystrom@google.com> Commit-Queue: Leaf Petersen <leafp@google.com>
76 lines
3.4 KiB
Dart
76 lines
3.4 KiB
Dart
// Copyright (c) 2012, 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.
|
|
|
|
// @dart = 2.9
|
|
|
|
import "dart:collection" show Queue;
|
|
import "dart:typed_data" show Uint8List, Float32List;
|
|
import "package:expect/expect.dart";
|
|
|
|
main() {
|
|
// testIterable takes an iterable and a list expected to be equal to
|
|
// the iterable's toList result, including the type parameter of the list.
|
|
testIterable(<dynamic>[], <dynamic>[]);
|
|
testIterable(<int>[], <int>[]);
|
|
testIterable(<String>[], <String>[]);
|
|
testIterable([1, 2, 3], [1, 2, 3]);
|
|
testIterable(<int>[1, 2, 3], <int>[1, 2, 3]);
|
|
testIterable(const [1, 2], [1, 2]);
|
|
testIterable(const <int>[1, 2], <int>[1, 2]);
|
|
testIterable(<dynamic, dynamic>{"x": 1, "y": 1}.keys, <dynamic>["x", "y"]);
|
|
testIterable(<String, int>{"x": 1, "y": 1}.keys, <String>["x", "y"]);
|
|
testIterable(<dynamic, dynamic>{"x": 2, "y": 3}.values, <dynamic>[2, 3]);
|
|
testIterable(<String, int>{"x": 2, "y": 3}.values, <int>[2, 3]);
|
|
testIterable(new Iterable.generate(3), [0, 1, 2]);
|
|
testIterable(new Iterable<int>.generate(3), <int>[0, 1, 2]);
|
|
testIterable(
|
|
new Iterable<String>.generate(3, (x) => "$x"), <String>["0", "1", "2"]);
|
|
testIterable(new Set.from([1, 2, 3]), [1, 2, 3]);
|
|
testIterable(new Set<int>.from([1, 2, 3]), <int>[1, 2, 3]);
|
|
testIterable(new Queue.from([1, 2, 3]), [1, 2, 3]);
|
|
testIterable(new Queue<int>.from(<int>[1, 2, 3]), <int>[1, 2, 3]);
|
|
testIterable(new Uint8List.fromList(<int>[1, 2, 3]), // //# 01: ok
|
|
<int>[1, 2, 3]); // //# 01: continued
|
|
testIterable(new Float32List.fromList([1.0, 2.0, 3.0]), // //# 01: continued
|
|
<double>[1.0, 2.0, 3.0]); // //# 01: continued
|
|
testIterable("abc".codeUnits, <int>[97, 98, 99]); // //# 01: continued
|
|
testIterable("abc".runes, <int>[97, 98, 99]);
|
|
}
|
|
|
|
testIterable(Iterable iterable, List expected, [int depth = 0]) {
|
|
print(" " * depth + "${iterable.runtimeType} vs ${expected.runtimeType}");
|
|
test(iterable, expected);
|
|
test(iterable, expected, growable: true);
|
|
test(iterable, expected, growable: false);
|
|
if (depth < 2) {
|
|
depth++;
|
|
testIterable(iterable.map((x) => x), new List.from(expected), depth);
|
|
testIterable(iterable.where((x) => true), expected, depth);
|
|
testIterable(iterable.expand((x) => [x]), new List.from(expected), depth);
|
|
testIterable(iterable.map((x) => x), new List.from(expected), depth);
|
|
testIterable(iterable.skipWhile((x) => false), expected, depth);
|
|
testIterable(iterable.takeWhile((x) => true), expected, depth);
|
|
testIterable(iterable.skip(0), expected, depth);
|
|
testIterable(iterable.take(expected.length * 2), expected, depth);
|
|
testIterable(iterable.toSet(), expected, depth);
|
|
}
|
|
}
|
|
|
|
test(Iterable iterable, List expected, {bool growable: true}) {
|
|
var list = iterable.toList(growable: growable);
|
|
Expect.listEquals(expected, list);
|
|
Expect.equals(expected is List<int>, list is List<int>, "int");
|
|
Expect.equals(expected is List<double>, list is List<double>, "double");
|
|
Expect.equals(expected is List<String>, list is List<String>, "str");
|
|
if (growable) {
|
|
int length = list.length;
|
|
list.add(null);
|
|
Expect.equals(length + 1, list.length);
|
|
} else {
|
|
Expect.throws(() {
|
|
list.add(null);
|
|
});
|
|
}
|
|
}
|