Index: test/codegen/lib/typed_data/typed_data_list_test.dart |
diff --git a/test/codegen/lib/typed_data/typed_data_list_test.dart b/test/codegen/lib/typed_data/typed_data_list_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f4f5ad4375f1da3fef47f264072b00269986621d |
--- /dev/null |
+++ b/test/codegen/lib/typed_data/typed_data_list_test.dart |
@@ -0,0 +1,199 @@ |
+// 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 'dart:typed_data'; |
+import 'package:expect/expect.dart'; |
+ |
+@AssumeDynamic() |
+@NoInline() |
+confuse(x) => x; |
+ |
+void testListFunctions(list, first, last, toElementType) { |
+ assert(list.length > 0); |
+ |
+ var reversed = list.reversed; |
+ Expect.listEquals(list, reversed.toList().reversed.toList()); |
+ int index = list.length - 1; |
+ for (var x in reversed) { |
+ Expect.equals(list[index], x); |
+ index--; |
+ } |
+ |
+ // Typed lists are fixed length. |
+ Expect.throws(() => list.add(0), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.addAll([1, 2]), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.clear(), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.insert(0, 0), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.insertAll(0, [1, 2]), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.remove(0), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.removeAt(0), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.removeLast(), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.removeRange(0, 1), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.removeWhere((x) => true), |
+ (e) => e is UnsupportedError); |
+ Expect.throws(() => list.replaceRange(0, 1, []), |
+ (e) => e is UnsupportedError); |
+ Expect.throws(() => list.retainWhere((x) => true), |
+ (e) => e is UnsupportedError); |
+ |
+ |
+ |
+ var map = list.asMap(); |
+ Expect.equals(list.length, map.length); |
+ Expect.isTrue(map is Map); |
+ Expect.listEquals(list, map.values.toList()); |
+ for (int i = 0; i < list.length; i++) { |
+ Expect.equals(list[i], map[i]); |
+ } |
+ |
+ Expect.listEquals(list, list.getRange(0, list.length).toList()); |
+ var subRange = list.getRange(1, list.length - 1).toList(); |
+ Expect.equals(list.length - 2, subRange.length); |
+ index = 1; |
+ for (var x in subRange) { |
+ Expect.equals(list[index], x); |
+ index++; |
+ } |
+ |
+ Expect.equals(0, list.lastIndexOf(first)); |
+ Expect.equals(list.length - 1, list.lastIndexOf(last)); |
+ Expect.equals(-1, list.lastIndexOf(-1)); |
+ |
+ var copy = list.toList(); |
+ list.fillRange(1, list.length - 1, toElementType(0)); |
+ Expect.equals(copy.first, list.first); |
+ Expect.equals(copy.last, list.last); |
+ for (int i = 1; i < list.length - 1; i++) { |
+ Expect.equals(0, list[i]); |
+ } |
+ |
+ list.setAll(1, |
+ list.getRange(1, list.length - 1).map((x) => toElementType(2))); |
+ Expect.equals(copy.first, list.first); |
+ Expect.equals(copy.last, list.last); |
+ for (int i = 1; i < list.length - 1; i++) { |
+ Expect.equals(2, list[i]); |
+ } |
+ |
+ list.setRange(1, list.length - 1, |
+ new Iterable.generate(list.length - 2, |
+ (x) => toElementType(x + 5))); |
+ Expect.equals(first, list.first); |
+ Expect.equals(last, list.last); |
+ for (int i = 1; i < list.length - 1; i++) { |
+ Expect.equals(4 + i, list[i]); |
+ } |
+ list.setRange(1, list.length - 1, |
+ new Iterable.generate(list.length - 1, |
+ (x) => toElementType(x + 5)), |
+ 1); |
+ Expect.equals(first, list.first); |
+ Expect.equals(last, list.last); |
+ for (int i = 1; i < list.length - 1; i++) { |
+ Expect.equals(5 + i, list[i]); |
+ } |
+ |
+ Expect.throws(() => list.setRange(1, list.length - 1, []), |
+ (e) => e is StateError); |
+ |
+ |
+ for (int i = 0; i < list.length; i++) { |
+ list[list.length - 1 - i] = toElementType(i); |
+ } |
+ list.sort(); |
+ for (int i = 0; i < list.length; i++) { |
+ Expect.equals(i, list[i]); |
+ } |
+ |
+ Expect.listEquals(list.getRange(1, list.length - 1).toList(), |
+ list.sublist(1, list.length - 1)); |
+ Expect.listEquals(list.getRange(1, list.length).toList(), list.sublist(1)); |
+ Expect.listEquals(list, list.sublist(0)); |
+ |
+ Expect.listEquals([], list.sublist(0, 0)); |
+ Expect.listEquals([], list.sublist(list.length)); |
+ Expect.listEquals([], list.sublist(list.length, list.length)); |
+ |
+ Expect.throws(() => list.sublist(list.length + 1), |
+ (e) => e is RangeError); |
+ Expect.throws(() => list.sublist(0, list.length + 1), |
+ (e) => e is RangeError); |
+ Expect.throws(() => list.sublist(1, 0), |
+ (e) => e is RangeError); |
+} |
+ |
+void emptyChecks(list) { |
+ assert(list.length == 0); |
+ |
+ Expect.isTrue(list.isEmpty); |
+ |
+ var reversed = list.reversed; |
+ Expect.listEquals(list, reversed.toList().reversed.toList()); |
+ |
+ // Typed lists are fixed length. Even when they are empty. |
+ Expect.throws(() => list.add(0), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.addAll([1, 2]), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.clear(), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.insert(0, 0), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.insertAll(0, [1, 2]), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.remove(0), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.removeAt(0), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.removeLast(), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.removeRange(0, 1), (e) => e is UnsupportedError); |
+ Expect.throws(() => list.removeWhere((x) => true), |
+ (e) => e is UnsupportedError); |
+ Expect.throws(() => list.replaceRange(0, 1, []), |
+ (e) => e is UnsupportedError); |
+ Expect.throws(() => list.retainWhere((x) => true), |
+ (e) => e is UnsupportedError); |
+ |
+ |
+ |
+ var map = list.asMap(); |
+ Expect.equals(list.length, map.length); |
+ Expect.isTrue(map is Map); |
+ Expect.listEquals(list, map.values.toList()); |
+ for (int i = 0; i < list.length; i++) { |
+ Expect.equals(list[i], map[i]); |
+ } |
+ |
+ Expect.listEquals(list, list.getRange(0, list.length).toList()); |
+ Expect.equals(-1, list.lastIndexOf(-1)); |
+ |
+ var copy = list.toList(); |
+ // Make sure we are allowed to call range-functions if they are 0..0. |
+ list.fillRange(0, 0); |
+ Expect.listEquals([], list.getRange(0, 0).toList()); |
+ |
+ list.setRange(0, 0, [1, 2]); |
+ |
+ list.sort(); |
+ |
+ Expect.listEquals([], list.sublist(0, 0)); |
+} |
+ |
+main() { |
+ toDouble(x) => x.toDouble(); |
+ toInt(x) => x.toInt(); |
+ |
+ testListFunctions(new Float32List.fromList([1.5, 6.3, 9.5]), |
+ 1.5, 9.5, toDouble); |
+ testListFunctions(new Float64List.fromList([1.5, 6.3, 9.5]), |
+ 1.5, 9.5, toDouble); |
+ testListFunctions(new Int8List.fromList([3, 5, 9]), 3, 9, toInt); |
+ testListFunctions(new Int16List.fromList([3, 5, 9]), 3, 9, toInt); |
+ testListFunctions(new Int32List.fromList([3, 5, 9]), 3, 9, toInt); |
+ testListFunctions(new Uint8List.fromList([3, 5, 9]), 3, 9, toInt); |
+ testListFunctions(new Uint16List.fromList([3, 5, 9]), 3, 9, toInt); |
+ testListFunctions(new Uint32List.fromList([3, 5, 9]), 3, 9, toInt); |
+ |
+ emptyChecks(new Float32List(0)); |
+ emptyChecks(new Float64List(0)); |
+ emptyChecks(new Int8List(0)); |
+ emptyChecks(new Int16List(0)); |
+ emptyChecks(new Int32List(0)); |
+ emptyChecks(new Uint8List(0)); |
+ emptyChecks(new Uint16List(0)); |
+ emptyChecks(new Uint32List(0)); |
+} |