| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 // | 4 // |
| 5 // Dart test program for testing native float and int arrays. 64-bit int arrays | 5 // Dart test program for testing native float and int arrays. 64-bit int arrays |
| 6 // are in a separate test. | 6 // are in a separate test. |
| 7 | 7 |
| 8 // Library tag to be able to run in html test framework. | 8 // Library tag to be able to run in html test framework. |
| 9 library TypedArray; | 9 library TypedArray; |
| 10 |
| 10 import "package:expect/expect.dart"; | 11 import "package:expect/expect.dart"; |
| 11 import 'package:async_helper/async_helper.dart'; | 12 import 'package:async_helper/async_helper.dart'; |
| 12 import 'dart:isolate'; | 13 import 'dart:isolate'; |
| 13 import 'dart:typed_data'; | 14 import 'dart:typed_data'; |
| 14 | 15 |
| 15 void main() { | 16 void main() { |
| 16 test(int8_receiver); | 17 test(int8_receiver); |
| 17 test(uint8_receiver); | 18 test(uint8_receiver); |
| 18 test(int16_receiver); | 19 test(int16_receiver); |
| 19 test(uint16_receiver); | 20 test(uint16_receiver); |
| 20 test(int32_receiver); | 21 test(int32_receiver); |
| 21 test(uint32_receiver); | 22 test(uint32_receiver); |
| 22 // int64 and uint64 in separate test. | 23 // int64 and uint64 in separate test. |
| 23 test(float32_receiver); | 24 test(float32_receiver); |
| 24 test(float64_receiver); | 25 test(float64_receiver); |
| 25 } | 26 } |
| 26 | 27 |
| 27 test(f) { | 28 test(f) { |
| 28 asyncStart(); | 29 asyncStart(); |
| 29 return f().whenComplete(asyncEnd); | 30 return f().whenComplete(asyncEnd); |
| 30 } | 31 } |
| 31 | 32 |
| 32 // Int8 array. | 33 // Int8 array. |
| 33 Int8List initInt8() { | 34 Int8List initInt8() { |
| 34 var int8 = new Int8List(2); | 35 var int8 = new Int8List(2); |
| 35 int8[0] = 10; | 36 int8[0] = 10; |
| 36 int8[1] = 100; | 37 int8[1] = 100; |
| 37 return int8; | 38 return int8; |
| 38 } | 39 } |
| 40 |
| 39 Int8List int8 = initInt8(); | 41 Int8List int8 = initInt8(); |
| 40 | 42 |
| 41 int8_receiver() { | 43 int8_receiver() { |
| 42 var response = new ReceivePort(); | 44 var response = new ReceivePort(); |
| 43 var remote = Isolate.spawn(int8_sender, [int8.length, response.sendPort]); | 45 var remote = Isolate.spawn(int8_sender, [int8.length, response.sendPort]); |
| 44 asyncStart(); | 46 asyncStart(); |
| 45 return response.first.then((a) { | 47 return response.first.then((a) { |
| 46 Expect.equals(int8.length, a.length); | 48 Expect.equals(int8.length, a.length); |
| 47 for (int i = 0; i < a.length; i++) { | 49 for (int i = 0; i < a.length; i++) { |
| 48 Expect.equals(int8[i], a[i]); | 50 Expect.equals(int8[i], a[i]); |
| 49 } | 51 } |
| 50 print("int8_receiver"); | 52 print("int8_receiver"); |
| 51 asyncEnd(); | 53 asyncEnd(); |
| 52 }); | 54 }); |
| 53 } | 55 } |
| 54 | 56 |
| 55 int8_sender(message) { | 57 int8_sender(message) { |
| 56 var len = message[0]; | 58 var len = message[0]; |
| 57 var r = message[1]; | 59 var r = message[1]; |
| 58 Expect.equals(int8.length, len); | 60 Expect.equals(int8.length, len); |
| 59 var a = new Int8List(len); | 61 var a = new Int8List(len); |
| 60 for (int i = 0; i < len; i++) { | 62 for (int i = 0; i < len; i++) { |
| 61 a[i] = int8[i]; | 63 a[i] = int8[i]; |
| 62 } | 64 } |
| 63 r.send(a); | 65 r.send(a); |
| 64 } | 66 } |
| 65 | 67 |
| 66 | |
| 67 // Uint8 array. | 68 // Uint8 array. |
| 68 Uint8List initUint8() { | 69 Uint8List initUint8() { |
| 69 var uint8 = new Uint8List(2); | 70 var uint8 = new Uint8List(2); |
| 70 uint8[0] = 0xff; | 71 uint8[0] = 0xff; |
| 71 uint8[1] = 0x7f; | 72 uint8[1] = 0x7f; |
| 72 return uint8; | 73 return uint8; |
| 73 } | 74 } |
| 75 |
| 74 Uint8List uint8 = initUint8(); | 76 Uint8List uint8 = initUint8(); |
| 75 | 77 |
| 76 uint8_receiver() { | 78 uint8_receiver() { |
| 77 var response = new ReceivePort(); | 79 var response = new ReceivePort(); |
| 78 var remote = Isolate.spawn(uint8_sender, [uint8.length, response.sendPort]); | 80 var remote = Isolate.spawn(uint8_sender, [uint8.length, response.sendPort]); |
| 79 asyncStart(); | 81 asyncStart(); |
| 80 return response.first.then((a) { | 82 return response.first.then((a) { |
| 81 Expect.equals(uint8.length, a.length); | 83 Expect.equals(uint8.length, a.length); |
| 82 for (int i = 0; i < a.length; i++) { | 84 for (int i = 0; i < a.length; i++) { |
| 83 Expect.equals(uint8[i], a[i]); | 85 Expect.equals(uint8[i], a[i]); |
| 84 } | 86 } |
| 85 print("uint8_receiver"); | 87 print("uint8_receiver"); |
| 86 asyncEnd(); | 88 asyncEnd(); |
| 87 }); | 89 }); |
| 88 } | 90 } |
| 89 | 91 |
| 90 uint8_sender(message) { | 92 uint8_sender(message) { |
| 91 var len = message[0]; | 93 var len = message[0]; |
| 92 var r = message[1]; | 94 var r = message[1]; |
| 93 Expect.equals(uint8.length, len); | 95 Expect.equals(uint8.length, len); |
| 94 var a = new Uint8List(len); | 96 var a = new Uint8List(len); |
| 95 for (int i = 0; i < len; i++) { | 97 for (int i = 0; i < len; i++) { |
| 96 a[i] = uint8[i]; | 98 a[i] = uint8[i]; |
| 97 } | 99 } |
| 98 r.send(a); | 100 r.send(a); |
| 99 } | 101 } |
| 100 | 102 |
| 101 | |
| 102 // Int16 array. | 103 // Int16 array. |
| 103 Int16List initInt16() { | 104 Int16List initInt16() { |
| 104 var int16 = new Int16List(2); | 105 var int16 = new Int16List(2); |
| 105 int16[0] = 1000; | 106 int16[0] = 1000; |
| 106 int16[1] = 10000; | 107 int16[1] = 10000; |
| 107 return int16; | 108 return int16; |
| 108 } | 109 } |
| 110 |
| 109 Int16List int16 = initInt16(); | 111 Int16List int16 = initInt16(); |
| 110 | 112 |
| 111 int16_receiver() { | 113 int16_receiver() { |
| 112 var response = new ReceivePort(); | 114 var response = new ReceivePort(); |
| 113 var remote = Isolate.spawn(int16_sender, [int16.length, response.sendPort]); | 115 var remote = Isolate.spawn(int16_sender, [int16.length, response.sendPort]); |
| 114 asyncStart(); | 116 asyncStart(); |
| 115 return response.first.then((a) { | 117 return response.first.then((a) { |
| 116 Expect.equals(int16.length, a.length); | 118 Expect.equals(int16.length, a.length); |
| 117 for (int i = 0; i < a.length; i++) { | 119 for (int i = 0; i < a.length; i++) { |
| 118 Expect.equals(int16[i], a[i]); | 120 Expect.equals(int16[i], a[i]); |
| 119 } | 121 } |
| 120 print("int16_receiver"); | 122 print("int16_receiver"); |
| 121 asyncEnd(); | 123 asyncEnd(); |
| 122 }); | 124 }); |
| 123 } | 125 } |
| 124 | 126 |
| 125 int16_sender(message) { | 127 int16_sender(message) { |
| 126 var len = message[0]; | 128 var len = message[0]; |
| 127 var r = message[1]; | 129 var r = message[1]; |
| 128 Expect.equals(int16.length, len); | 130 Expect.equals(int16.length, len); |
| 129 var a = new Int16List(len); | 131 var a = new Int16List(len); |
| 130 for (int i = 0; i < len; i++) { | 132 for (int i = 0; i < len; i++) { |
| 131 a[i] = int16[i]; | 133 a[i] = int16[i]; |
| 132 } | 134 } |
| 133 r.send(a); | 135 r.send(a); |
| 134 } | 136 } |
| 135 | 137 |
| 136 | |
| 137 // Uint16 array. | 138 // Uint16 array. |
| 138 Uint16List initUint16() { | 139 Uint16List initUint16() { |
| 139 var uint16 = new Uint16List(2); | 140 var uint16 = new Uint16List(2); |
| 140 uint16[0] = 0xffff; | 141 uint16[0] = 0xffff; |
| 141 uint16[1] = 0x7fff; | 142 uint16[1] = 0x7fff; |
| 142 return uint16; | 143 return uint16; |
| 143 } | 144 } |
| 145 |
| 144 Uint16List uint16 = initUint16(); | 146 Uint16List uint16 = initUint16(); |
| 145 | 147 |
| 146 uint16_receiver() { | 148 uint16_receiver() { |
| 147 var response = new ReceivePort(); | 149 var response = new ReceivePort(); |
| 148 var remote = Isolate.spawn(uint16_sender, [uint16.length, response.sendPort]); | 150 var remote = Isolate.spawn(uint16_sender, [uint16.length, response.sendPort]); |
| 149 asyncStart(); | 151 asyncStart(); |
| 150 return response.first.then((a) { | 152 return response.first.then((a) { |
| 151 Expect.equals(uint16.length, a.length); | 153 Expect.equals(uint16.length, a.length); |
| 152 for (int i = 0; i < a.length; i++) { | 154 for (int i = 0; i < a.length; i++) { |
| 153 Expect.equals(uint16[i], a[i]); | 155 Expect.equals(uint16[i], a[i]); |
| 154 } | 156 } |
| 155 print("uint16_receiver"); | 157 print("uint16_receiver"); |
| 156 asyncEnd(); | 158 asyncEnd(); |
| 157 }); | 159 }); |
| 158 } | 160 } |
| 159 | 161 |
| 160 uint16_sender(message) { | 162 uint16_sender(message) { |
| 161 var len = message[0]; | 163 var len = message[0]; |
| 162 var r = message[1]; | 164 var r = message[1]; |
| 163 Expect.equals(uint16.length, len); | 165 Expect.equals(uint16.length, len); |
| 164 var a = new Uint16List(len); | 166 var a = new Uint16List(len); |
| 165 for (int i = 0; i < len; i++) { | 167 for (int i = 0; i < len; i++) { |
| 166 a[i] = uint16[i]; | 168 a[i] = uint16[i]; |
| 167 } | 169 } |
| 168 r.send(a); | 170 r.send(a); |
| 169 } | 171 } |
| 170 | 172 |
| 171 | |
| 172 // Int32 array. | 173 // Int32 array. |
| 173 Int32List initInt32() { | 174 Int32List initInt32() { |
| 174 var int32 = new Int32List(2); | 175 var int32 = new Int32List(2); |
| 175 int32[0] = 100000; | 176 int32[0] = 100000; |
| 176 int32[1] = 1000000; | 177 int32[1] = 1000000; |
| 177 return int32; | 178 return int32; |
| 178 } | 179 } |
| 180 |
| 179 Int32List int32 = initInt32(); | 181 Int32List int32 = initInt32(); |
| 180 | 182 |
| 181 int32_receiver() { | 183 int32_receiver() { |
| 182 var response = new ReceivePort(); | 184 var response = new ReceivePort(); |
| 183 var remote = Isolate.spawn(int32_sender, [int32.length, response.sendPort]); | 185 var remote = Isolate.spawn(int32_sender, [int32.length, response.sendPort]); |
| 184 asyncStart(); | 186 asyncStart(); |
| 185 return response.first.then((a) { | 187 return response.first.then((a) { |
| 186 Expect.equals(int32.length, a.length); | 188 Expect.equals(int32.length, a.length); |
| 187 for (int i = 0; i < a.length; i++) { | 189 for (int i = 0; i < a.length; i++) { |
| 188 Expect.equals(int32[i], a[i]); | 190 Expect.equals(int32[i], a[i]); |
| 189 } | 191 } |
| 190 print("int32_receiver"); | 192 print("int32_receiver"); |
| 191 asyncEnd(); | 193 asyncEnd(); |
| 192 }); | 194 }); |
| 193 } | 195 } |
| 194 | 196 |
| 195 int32_sender(message) { | 197 int32_sender(message) { |
| 196 var len = message[0]; | 198 var len = message[0]; |
| 197 var r = message[1]; | 199 var r = message[1]; |
| 198 Expect.equals(int32.length, len); | 200 Expect.equals(int32.length, len); |
| 199 var a = new Int32List(len); | 201 var a = new Int32List(len); |
| 200 for (int i = 0; i < len; i++) { | 202 for (int i = 0; i < len; i++) { |
| 201 a[i] = int32[i]; | 203 a[i] = int32[i]; |
| 202 } | 204 } |
| 203 r.send(a); | 205 r.send(a); |
| 204 } | 206 } |
| 205 | 207 |
| 206 | |
| 207 // Uint32 array. | 208 // Uint32 array. |
| 208 Uint32List initUint32() { | 209 Uint32List initUint32() { |
| 209 var uint32 = new Uint32List(2); | 210 var uint32 = new Uint32List(2); |
| 210 uint32[0] = 0xffffffff; | 211 uint32[0] = 0xffffffff; |
| 211 uint32[1] = 0x7fffffff; | 212 uint32[1] = 0x7fffffff; |
| 212 return uint32; | 213 return uint32; |
| 213 } | 214 } |
| 215 |
| 214 Uint32List uint32 = initUint32(); | 216 Uint32List uint32 = initUint32(); |
| 215 | 217 |
| 216 uint32_receiver() { | 218 uint32_receiver() { |
| 217 var response = new ReceivePort(); | 219 var response = new ReceivePort(); |
| 218 var remote = Isolate.spawn(uint32_sender, [uint32.length, response.sendPort]); | 220 var remote = Isolate.spawn(uint32_sender, [uint32.length, response.sendPort]); |
| 219 asyncStart(); | 221 asyncStart(); |
| 220 return response.first.then((a) { | 222 return response.first.then((a) { |
| 221 Expect.equals(uint32.length, a.length); | 223 Expect.equals(uint32.length, a.length); |
| 222 for (int i = 0; i < a.length; i++) { | 224 for (int i = 0; i < a.length; i++) { |
| 223 Expect.equals(uint32[i], a[i]); | 225 Expect.equals(uint32[i], a[i]); |
| 224 } | 226 } |
| 225 print("uint32_receiver"); | 227 print("uint32_receiver"); |
| 226 asyncEnd(); | 228 asyncEnd(); |
| 227 }); | 229 }); |
| 228 } | 230 } |
| 229 | 231 |
| 230 uint32_sender(message) { | 232 uint32_sender(message) { |
| 231 var len = message[0]; | 233 var len = message[0]; |
| 232 var r = message[1]; | 234 var r = message[1]; |
| 233 Expect.equals(uint32.length, len); | 235 Expect.equals(uint32.length, len); |
| 234 var a = new Uint32List(len); | 236 var a = new Uint32List(len); |
| 235 for (int i = 0; i < len; i++) { | 237 for (int i = 0; i < len; i++) { |
| 236 a[i] = uint32[i]; | 238 a[i] = uint32[i]; |
| 237 } | 239 } |
| 238 r.send(a); | 240 r.send(a); |
| 239 } | 241 } |
| 240 | 242 |
| 241 | |
| 242 // Float32 Array. | 243 // Float32 Array. |
| 243 Float32List initFloat32() { | 244 Float32List initFloat32() { |
| 244 var float32 = new Float32List(2); | 245 var float32 = new Float32List(2); |
| 245 float32[0] = 1.0; | 246 float32[0] = 1.0; |
| 246 float32[1] = 2.0; | 247 float32[1] = 2.0; |
| 247 return float32; | 248 return float32; |
| 248 } | 249 } |
| 250 |
| 249 Float32List float32 = initFloat32(); | 251 Float32List float32 = initFloat32(); |
| 250 | 252 |
| 251 float32_receiver() { | 253 float32_receiver() { |
| 252 var response = new ReceivePort(); | 254 var response = new ReceivePort(); |
| 253 var remote = | 255 var remote = |
| 254 Isolate.spawn(float32_sender, [float32.length, response.sendPort]); | 256 Isolate.spawn(float32_sender, [float32.length, response.sendPort]); |
| 255 asyncStart(); | 257 asyncStart(); |
| 256 return response.first.then((a) { | 258 return response.first.then((a) { |
| 257 Expect.equals(float32.length, a.length); | 259 Expect.equals(float32.length, a.length); |
| 258 for (int i = 0; i < a.length; i++) { | 260 for (int i = 0; i < a.length; i++) { |
| 259 Expect.equals(float32[i], a[i]); | 261 Expect.equals(float32[i], a[i]); |
| 260 } | 262 } |
| 261 print("float32_receiver"); | 263 print("float32_receiver"); |
| 262 asyncEnd(); | 264 asyncEnd(); |
| 263 }); | 265 }); |
| 264 } | 266 } |
| 265 | 267 |
| 266 float32_sender(message) { | 268 float32_sender(message) { |
| 267 var len = message[0]; | 269 var len = message[0]; |
| 268 var r = message[1]; | 270 var r = message[1]; |
| 269 Expect.equals(float32.length, len); | 271 Expect.equals(float32.length, len); |
| 270 var a = new Float32List(len); | 272 var a = new Float32List(len); |
| 271 for (int i = 0; i < len; i++) { | 273 for (int i = 0; i < len; i++) { |
| 272 a[i] = float32[i]; | 274 a[i] = float32[i]; |
| 273 } | 275 } |
| 274 r.send(a); | 276 r.send(a); |
| 275 } | 277 } |
| 276 | 278 |
| 277 | |
| 278 // Float64 Array. | 279 // Float64 Array. |
| 279 Float64List initFloat64() { | 280 Float64List initFloat64() { |
| 280 var float64 = new Float64List(2); | 281 var float64 = new Float64List(2); |
| 281 float64[0] = 101.234; | 282 float64[0] = 101.234; |
| 282 float64[1] = 201.765; | 283 float64[1] = 201.765; |
| 283 return float64; | 284 return float64; |
| 284 } | 285 } |
| 286 |
| 285 Float64List float64 = initFloat64(); | 287 Float64List float64 = initFloat64(); |
| 286 | 288 |
| 287 float64_receiver() { | 289 float64_receiver() { |
| 288 var response = new ReceivePort(); | 290 var response = new ReceivePort(); |
| 289 var remote = | 291 var remote = |
| 290 Isolate.spawn(float64_sender, [float64.length, response.sendPort]); | 292 Isolate.spawn(float64_sender, [float64.length, response.sendPort]); |
| 291 asyncStart(); | 293 asyncStart(); |
| 292 return response.first.then((a) { | 294 return response.first.then((a) { |
| 293 Expect.equals(float64.length, a.length); | 295 Expect.equals(float64.length, a.length); |
| 294 for (int i = 0; i < a.length; i++) { | 296 for (int i = 0; i < a.length; i++) { |
| 295 Expect.equals(float64[i], a[i]); | 297 Expect.equals(float64[i], a[i]); |
| 296 } | 298 } |
| 297 print("float64_receiver"); | 299 print("float64_receiver"); |
| 298 asyncEnd(); | 300 asyncEnd(); |
| 299 }); | 301 }); |
| 300 } | 302 } |
| 301 | 303 |
| 302 float64_sender(message) { | 304 float64_sender(message) { |
| 303 var len = message[0]; | 305 var len = message[0]; |
| 304 var r = message[1]; | 306 var r = message[1]; |
| 305 Expect.equals(float64.length, len); | 307 Expect.equals(float64.length, len); |
| 306 var a = new Float64List(len); | 308 var a = new Float64List(len); |
| 307 for (int i = 0; i < len; i++) { | 309 for (int i = 0; i < len; i++) { |
| 308 a[i] = float64[i]; | 310 a[i] = float64[i]; |
| 309 } | 311 } |
| 310 r.send(a); | 312 r.send(a); |
| 311 } | 313 } |
| OLD | NEW |