| // 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 and int arrays. 64-bit int arrays |
| // are in a separate test. |
| |
| // Library tag to be able to run in html test framework. |
| library TypedArray; |
| |
| import "package:expect/expect.dart"; |
| import 'package:async_helper/async_helper.dart'; |
| import 'dart:isolate'; |
| import 'dart:typed_data'; |
| |
| void main() { |
| test(int8_receiver); |
| test(uint8_receiver); |
| test(int16_receiver); |
| test(uint16_receiver); |
| test(int32_receiver); |
| test(uint32_receiver); |
| // int64 and uint64 in separate test. |
| test(float32_receiver); |
| test(float64_receiver); |
| } |
| |
| test(f) { |
| asyncStart(); |
| return f().whenComplete(asyncEnd); |
| } |
| |
| // Int8 array. |
| Int8List initInt8() { |
| var int8 = new Int8List(2); |
| int8[0] = 10; |
| int8[1] = 100; |
| return int8; |
| } |
| |
| Int8List int8 = initInt8(); |
| |
| int8_receiver() { |
| var response = new ReceivePort(); |
| var remote = Isolate.spawn(int8_sender, [int8.length, response.sendPort]); |
| asyncStart(); |
| return response.first.then((a) { |
| Expect.equals(int8.length, a.length); |
| for (int i = 0; i < a.length; i++) { |
| Expect.equals(int8[i], a[i]); |
| } |
| print("int8_receiver"); |
| asyncEnd(); |
| }); |
| } |
| |
| int8_sender(message) { |
| var len = message[0]; |
| var r = message[1]; |
| Expect.equals(int8.length, len); |
| var a = new Int8List(len); |
| for (int i = 0; i < len; i++) { |
| a[i] = int8[i]; |
| } |
| r.send(a); |
| } |
| |
| // Uint8 array. |
| Uint8List initUint8() { |
| var uint8 = new Uint8List(2); |
| uint8[0] = 0xff; |
| uint8[1] = 0x7f; |
| return uint8; |
| } |
| |
| Uint8List uint8 = initUint8(); |
| |
| uint8_receiver() { |
| var response = new ReceivePort(); |
| var remote = Isolate.spawn(uint8_sender, [uint8.length, response.sendPort]); |
| asyncStart(); |
| return response.first.then((a) { |
| Expect.equals(uint8.length, a.length); |
| for (int i = 0; i < a.length; i++) { |
| Expect.equals(uint8[i], a[i]); |
| } |
| print("uint8_receiver"); |
| asyncEnd(); |
| }); |
| } |
| |
| uint8_sender(message) { |
| var len = message[0]; |
| var r = message[1]; |
| Expect.equals(uint8.length, len); |
| var a = new Uint8List(len); |
| for (int i = 0; i < len; i++) { |
| a[i] = uint8[i]; |
| } |
| r.send(a); |
| } |
| |
| // Int16 array. |
| Int16List initInt16() { |
| var int16 = new Int16List(2); |
| int16[0] = 1000; |
| int16[1] = 10000; |
| return int16; |
| } |
| |
| Int16List int16 = initInt16(); |
| |
| int16_receiver() { |
| var response = new ReceivePort(); |
| var remote = Isolate.spawn(int16_sender, [int16.length, response.sendPort]); |
| asyncStart(); |
| return response.first.then((a) { |
| Expect.equals(int16.length, a.length); |
| for (int i = 0; i < a.length; i++) { |
| Expect.equals(int16[i], a[i]); |
| } |
| print("int16_receiver"); |
| asyncEnd(); |
| }); |
| } |
| |
| int16_sender(message) { |
| var len = message[0]; |
| var r = message[1]; |
| Expect.equals(int16.length, len); |
| var a = new Int16List(len); |
| for (int i = 0; i < len; i++) { |
| a[i] = int16[i]; |
| } |
| r.send(a); |
| } |
| |
| // Uint16 array. |
| Uint16List initUint16() { |
| var uint16 = new Uint16List(2); |
| uint16[0] = 0xffff; |
| uint16[1] = 0x7fff; |
| return uint16; |
| } |
| |
| Uint16List uint16 = initUint16(); |
| |
| uint16_receiver() { |
| var response = new ReceivePort(); |
| var remote = Isolate.spawn(uint16_sender, [uint16.length, response.sendPort]); |
| asyncStart(); |
| return response.first.then((a) { |
| Expect.equals(uint16.length, a.length); |
| for (int i = 0; i < a.length; i++) { |
| Expect.equals(uint16[i], a[i]); |
| } |
| print("uint16_receiver"); |
| asyncEnd(); |
| }); |
| } |
| |
| uint16_sender(message) { |
| var len = message[0]; |
| var r = message[1]; |
| Expect.equals(uint16.length, len); |
| var a = new Uint16List(len); |
| for (int i = 0; i < len; i++) { |
| a[i] = uint16[i]; |
| } |
| r.send(a); |
| } |
| |
| // Int32 array. |
| Int32List initInt32() { |
| var int32 = new Int32List(2); |
| int32[0] = 100000; |
| int32[1] = 1000000; |
| return int32; |
| } |
| |
| Int32List int32 = initInt32(); |
| |
| int32_receiver() { |
| var response = new ReceivePort(); |
| var remote = Isolate.spawn(int32_sender, [int32.length, response.sendPort]); |
| asyncStart(); |
| return response.first.then((a) { |
| Expect.equals(int32.length, a.length); |
| for (int i = 0; i < a.length; i++) { |
| Expect.equals(int32[i], a[i]); |
| } |
| print("int32_receiver"); |
| asyncEnd(); |
| }); |
| } |
| |
| int32_sender(message) { |
| var len = message[0]; |
| var r = message[1]; |
| Expect.equals(int32.length, len); |
| var a = new Int32List(len); |
| for (int i = 0; i < len; i++) { |
| a[i] = int32[i]; |
| } |
| r.send(a); |
| } |
| |
| // Uint32 array. |
| Uint32List initUint32() { |
| var uint32 = new Uint32List(2); |
| uint32[0] = 0xffffffff; |
| uint32[1] = 0x7fffffff; |
| return uint32; |
| } |
| |
| Uint32List uint32 = initUint32(); |
| |
| uint32_receiver() { |
| var response = new ReceivePort(); |
| var remote = Isolate.spawn(uint32_sender, [uint32.length, response.sendPort]); |
| asyncStart(); |
| return response.first.then((a) { |
| Expect.equals(uint32.length, a.length); |
| for (int i = 0; i < a.length; i++) { |
| Expect.equals(uint32[i], a[i]); |
| } |
| print("uint32_receiver"); |
| asyncEnd(); |
| }); |
| } |
| |
| uint32_sender(message) { |
| var len = message[0]; |
| var r = message[1]; |
| Expect.equals(uint32.length, len); |
| var a = new Uint32List(len); |
| for (int i = 0; i < len; i++) { |
| a[i] = uint32[i]; |
| } |
| r.send(a); |
| } |
| |
| // Float32 Array. |
| Float32List initFloat32() { |
| var float32 = new Float32List(2); |
| float32[0] = 1.0; |
| float32[1] = 2.0; |
| return float32; |
| } |
| |
| Float32List float32 = initFloat32(); |
| |
| float32_receiver() { |
| var response = new ReceivePort(); |
| var remote = |
| Isolate.spawn(float32_sender, [float32.length, response.sendPort]); |
| asyncStart(); |
| return response.first.then((a) { |
| Expect.equals(float32.length, a.length); |
| for (int i = 0; i < a.length; i++) { |
| Expect.equals(float32[i], a[i]); |
| } |
| print("float32_receiver"); |
| asyncEnd(); |
| }); |
| } |
| |
| float32_sender(message) { |
| var len = message[0]; |
| var r = message[1]; |
| Expect.equals(float32.length, len); |
| var a = new Float32List(len); |
| for (int i = 0; i < len; i++) { |
| a[i] = float32[i]; |
| } |
| r.send(a); |
| } |
| |
| // Float64 Array. |
| Float64List initFloat64() { |
| var float64 = new Float64List(2); |
| float64[0] = 101.234; |
| float64[1] = 201.765; |
| return float64; |
| } |
| |
| Float64List float64 = initFloat64(); |
| |
| float64_receiver() { |
| var response = new ReceivePort(); |
| var remote = |
| Isolate.spawn(float64_sender, [float64.length, response.sendPort]); |
| asyncStart(); |
| return response.first.then((a) { |
| Expect.equals(float64.length, a.length); |
| for (int i = 0; i < a.length; i++) { |
| Expect.equals(float64[i], a[i]); |
| } |
| print("float64_receiver"); |
| asyncEnd(); |
| }); |
| } |
| |
| float64_sender(message) { |
| var len = message[0]; |
| var r = message[1]; |
| Expect.equals(float64.length, len); |
| var a = new Float64List(len); |
| for (int i = 0; i < len; i++) { |
| a[i] = float64[i]; |
| } |
| r.send(a); |
| } |