| // 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 test program for testing native float arrays. | |
| // VMOptions=--optimization_counter_threshold=10 --no-background_compilation | |
| import "package:expect/expect.dart"; | |
| import 'dart:typed_data'; | |
| void testCreateFloat32Array() { | |
| Float32List floatArray; | |
| floatArray = new Float32List(0); | |
| Expect.equals(0, floatArray.length); | |
| floatArray = new Float32List(10); | |
| Expect.equals(10, floatArray.length); | |
| for (int i = 0; i < 10; i++) { | |
| Expect.equals(0.0, floatArray[i]); | |
| } | |
| } | |
| void testSetRange32() { | |
| Float32List floatArray = new Float32List(3); | |
| List<double> list = [10.0, 11.0, 12.0]; | |
| floatArray.setRange(0, 3, list); | |
| for (int i = 0; i < 3; i++) { | |
| Expect.equals(10 + i, floatArray[i]); | |
| } | |
| floatArray[0] = 20.0; | |
| floatArray[1] = 21.0; | |
| floatArray[2] = 22.0; | |
| list.setRange(0, 3, floatArray); | |
| for (int i = 0; i < 3; i++) { | |
| Expect.equals(20 + i, list[i]); | |
| } | |
| // 4.0e40 is larger than the largest representable float. | |
| floatArray.setRange(1, 3, const [8.0, 4.0e40]); | |
| Expect.equals(20, floatArray[0]); | |
| Expect.equals(8, floatArray[1]); | |
| Expect.equals(double.infinity, floatArray[2]); | |
| } | |
| void testIndexOutOfRange32() { | |
| Float32List floatArray = new Float32List(3); | |
| List<double> list = const [0.0, 1.0, 2.0, 3.0]; | |
| Expect.throws(() { | |
| floatArray[5] = 2.0; | |
| }); | |
| Expect.throws(() { | |
| floatArray.setRange(0, 4, list); | |
| }); | |
| Expect.throws(() { | |
| floatArray.setRange(3, 4, list); | |
| }); | |
| } | |
| void testIndexOf32() { | |
| var list = new Float32List(10); | |
| for (int i = 0; i < list.length; i++) { | |
| list[i] = i + 10.0; | |
| } | |
| Expect.equals(0, list.indexOf(10.0)); | |
| Expect.equals(5, list.indexOf(15.0)); | |
| Expect.equals(9, list.indexOf(19.0)); | |
| Expect.equals(-1, list.indexOf(20.0)); | |
| } | |
| void testCreateFloat64Array() { | |
| Float64List floatArray; | |
| floatArray = new Float64List(0); | |
| Expect.equals(0, floatArray.length); | |
| floatArray = new Float64List(10); | |
| Expect.equals(10, floatArray.length); | |
| for (int i = 0; i < 10; i++) { | |
| Expect.equals(0.0, floatArray[i]); | |
| } | |
| } | |
| void testSetRange64() { | |
| Float64List floatArray = new Float64List(3); | |
| List<double> list = [10.0, 11.0, 12.0]; | |
| floatArray.setRange(0, 3, list); | |
| for (int i = 0; i < 3; i++) { | |
| Expect.equals(10 + i, floatArray[i]); | |
| } | |
| floatArray[0] = 20.0; | |
| floatArray[1] = 21.0; | |
| floatArray[2] = 22.0; | |
| list.setRange(0, 3, floatArray); | |
| for (int i = 0; i < 3; i++) { | |
| Expect.equals(20 + i, list[i]); | |
| } | |
| // Unlike Float32Array we can properly represent 4.0e40 | |
| floatArray.setRange(1, 3, const [8.0, 4.0e40]); | |
| Expect.equals(20, floatArray[0]); | |
| Expect.equals(8, floatArray[1]); | |
| Expect.equals(4.0e40, floatArray[2]); | |
| } | |
| void testIndexOutOfRange64() { | |
| Float64List floatArray = new Float64List(3); | |
| List<double> list = const [0.0, 1.0, 2.0, 3.0]; | |
| Expect.throws(() { | |
| floatArray[5] = 2.0; | |
| }); | |
| Expect.throws(() { | |
| floatArray.setRange(0, 4, list); | |
| }); | |
| Expect.throws(() { | |
| floatArray.setRange(3, 4, list); | |
| }); | |
| } | |
| void testIndexOf64() { | |
| var list = new Float64List(10); | |
| for (int i = 0; i < list.length; i++) { | |
| list[i] = i + 10.0; | |
| } | |
| Expect.equals(0, list.indexOf(10.0)); | |
| Expect.equals(5, list.indexOf(15.0)); | |
| Expect.equals(9, list.indexOf(19.0)); | |
| Expect.equals(-1, list.indexOf(20.0)); | |
| } | |
| storeIt32(Float32List a, int index, value) { | |
| a[index] = value; | |
| } | |
| storeIt64(Float64List a, int index, value) { | |
| a[index] = value; | |
| } | |
| testPolymorphicLoad(list) { | |
| return list[0]; | |
| } | |
| main() { | |
| var a32 = new Float32List(5); | |
| for (int i = 0; i < 20; i++) { | |
| testCreateFloat32Array(); | |
| testSetRange32(); | |
| testIndexOutOfRange32(); | |
| testIndexOf32(); | |
| storeIt32(a32, 1, 2.0); | |
| testPolymorphicLoad(a32); | |
| } | |
| var a64 = new Float64List(5); | |
| for (int i = 0; i < 20; i++) { | |
| testCreateFloat64Array(); | |
| testSetRange64(); | |
| testIndexOutOfRange64(); | |
| testIndexOf64(); | |
| storeIt64(a64, 1, 2.0); | |
| testPolymorphicLoad(a64); | |
| } | |
| var f32x4 = new Float32x4List(5); | |
| for (int i = 0; i < 20; i++) { | |
| testPolymorphicLoad(f32x4); | |
| } | |
| // Check optimized (inlined) version of []= | |
| Expect.throws(() { | |
| storeIt32(a32, 1, 2); | |
| }); | |
| Expect.throws(() { | |
| storeIt64(a64, 1, 2); | |
| }); | |
| } |