| // 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. |
| |
| // @dart = 2.9 |
| |
| 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 = <Is<List>>[ |
| isFloat32list, |
| isFloat64list, |
| isInt8List, |
| isInt16List, |
| isInt32List, |
| isUint8List, |
| isUint16List, |
| isUint32List, |
| isUint8ClampedList |
| ]; |
| |
| testInt(list, check) { |
| testSublistType(list, <Is<List>>[check, isIntList, isNumList], allChecks); |
| } |
| |
| testDouble(list, check) { |
| testSublistType( |
| list, <Is<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(); |
| } |