| // 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 |
| |
| // Library tag to be able to run in html test framework. |
| library FloatArrayTest; |
| |
| 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(var 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); |
| }); |
| } |