Index: test/codegen/lib/typed_data/typed_data_sublist_type_test.dart |
diff --git a/test/codegen/lib/typed_data/typed_data_sublist_type_test.dart b/test/codegen/lib/typed_data/typed_data_sublist_type_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2873693e1d981c216ba9f4ff25eb43e2b44ccde5 |
--- /dev/null |
+++ b/test/codegen/lib/typed_data/typed_data_sublist_type_test.dart |
@@ -0,0 +1,93 @@ |
+// 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'; |
+ |
+// Test that the sublist of a typed_data list is of the same type. |
+ |
+var inscrutable; |
+ |
+class Is<T> { |
+ final name; |
+ Is(this.name); |
+ check(x) => x is T; |
+ expect(x, part) { |
+ Expect.isTrue(check(x), '($part: ${x.runtimeType}) is $name'); |
+ } |
+ expectNot(x, part) { |
+ Expect.isFalse(check(x), '($part: ${x.runtimeType}) is! $name'); |
+ } |
+} |
+ |
+void testSublistType(input, positive, all) { |
+ var negative = all.where((check) => !positive.contains(check)); |
+ |
+ input = inscrutable(input); |
+ |
+ for (var check in positive) check.expect(input, 'input'); |
+ for (var check in negative) check.expectNot(input, 'input'); |
+ |
+ var sub = inscrutable(input.sublist(1)); |
+ |
+ for (var check in positive) check.expect(sub, 'sublist'); |
+ for (var check in negative) check.expectNot(sub, 'sublist'); |
+ |
+ var sub2 = inscrutable(input.sublist(10)); |
+ |
+ Expect.equals(0, sub2.length); |
+ for (var check in positive) check.expect(sub2, 'empty sublist'); |
+ for (var check in negative) check.expectNot(sub2, 'empty sublist'); |
+} |
+ |
+ |
+void testTypes() { |
+ var isFloat32list = new Is<Float32List>('Float32List'); |
+ var isFloat64list = new Is<Float64List>('Float64List'); |
+ |
+ var isInt8List = new Is<Int8List>('Int8List'); |
+ var isInt16List = new Is<Int16List>('Int16List'); |
+ var isInt32List = new Is<Int32List>('Int32List'); |
+ |
+ var isUint8List = new Is<Uint8List>('Uint8List'); |
+ var isUint16List = new Is<Uint16List>('Uint16List'); |
+ var isUint32List = new Is<Uint32List>('Uint32List'); |
+ |
+ var isUint8ClampedList = new Is<Uint8ClampedList>('Uint8ClampedList'); |
+ |
+ var isIntList = new Is<List<int>>('List<int>'); |
+ var isDoubleList = new Is<List<double>>('List<double>'); |
+ var isNumList = new Is<List<num>>('List<num>'); |
+ |
+ var allChecks = [isFloat32list, isFloat64list, |
+ isInt8List, isInt16List, isInt32List, |
+ isUint8List, isUint16List, isUint32List, |
+ isUint8ClampedList]; |
+ |
+ testInt(list, check) { |
+ testSublistType(list, [check, isIntList, isNumList], allChecks); |
+ } |
+ |
+ testDouble(list, check) { |
+ testSublistType(list, [check, isDoubleList, isNumList], allChecks); |
+ } |
+ |
+ testDouble(new Float32List(10), isFloat32list); |
+ testDouble(new Float64List(10), isFloat64list); |
+ |
+ testInt(new Int8List(10), isInt8List); |
+ testInt(new Int16List(10), isInt16List); |
+ testInt(new Int32List(10), isInt32List); |
+ |
+ testInt(new Uint8List(10), isUint8List); |
+ testInt(new Uint16List(10), isUint16List); |
+ testInt(new Uint32List(10), isUint32List); |
+ |
+ testInt(new Uint8ClampedList(10), isUint8ClampedList); |
+} |
+ |
+main() { |
+ inscrutable = (x) => x; |
+ testTypes(); |
+} |