| Index: frog/tests/frog/src/NodeTypedArrayTest.dart
|
| ===================================================================
|
| --- frog/tests/frog/src/NodeTypedArrayTest.dart (revision 0)
|
| +++ frog/tests/frog/src/NodeTypedArrayTest.dart (revision 0)
|
| @@ -0,0 +1,514 @@
|
| +// Copyright (c) 2011, 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.
|
| +
|
| +#library('NodeTypedArrayTest');
|
| +
|
| +#import('unittest_node.dart');
|
| +#import('../../../lib/node/node.dart');
|
| +
|
| +void compareLists(List a, List b) {
|
| + Expect.equals(a.length, b.length, 'length of lists');
|
| + for (int i = 0; i < a.length; i++) {
|
| + Expect.equals(a[i], b[i]);
|
| + }
|
| +}
|
| +
|
| +List listFromList(ctor, List a) {
|
| + int length = a.length;
|
| + List b = ctor(length);
|
| + for (int i = 0; i < a.length; i++) {
|
| + b[i] = a[i];
|
| + }
|
| + return b;
|
| +}
|
| +
|
| +void listTest(List ctor(int length)) {
|
| + group('List', (){
|
| + test('length', () {
|
| + List a = ctor(10);
|
| + Expect.equals(10, a.length);
|
| + });
|
| + test('operator[]', () {
|
| + List src = [0,1,2,3];
|
| + List a = listFromList(ctor, src);
|
| + compareLists(src, a);
|
| + });
|
| + test('operator[]=', () {
|
| + List src = [0,1,2,3];
|
| + int length = src.length;
|
| + List a = ctor(length);
|
| + for (int i = 0; i < length; i++) {
|
| + a[i] = src[i];
|
| + }
|
| + compareLists(src, a);
|
| + });
|
| + test('indexOf', () {
|
| + List a = listFromList(ctor, [10,11,12,11]);
|
| + Expect.equals(-1, a.indexOf(17));
|
| + Expect.equals(1, a.indexOf(11));
|
| + Expect.equals(3, a.indexOf(11, 2));
|
| + });
|
| + test('lastIndexOf', () {
|
| + List a = listFromList(ctor, [10,11,12,11]);
|
| + Expect.equals(-1, a.lastIndexOf(17));
|
| + Expect.equals(3, a.lastIndexOf(11));
|
| + Expect.equals(1, a.lastIndexOf(11, 2));
|
| + });
|
| + test('last', () {
|
| + List a = listFromList(ctor, [10,11,12,13]);
|
| + Expect.equals(13, a.last());
|
| + });
|
| + test('getRange', () {
|
| + List a = listFromList(ctor, [10,11,12,13]);
|
| + List b = a.getRange(1,2);
|
| + a[1] = 15;
|
| + a[2] = 17;
|
| + compareLists(listFromList(ctor, [11,12]), b);
|
| + });
|
| + test('sort', () {
|
| + List a = listFromList(ctor, [13,11,11,12]);
|
| + List b = listFromList(ctor, [11,11,12,13]);
|
| + a.sort((a,b) => a < b ? -1 : ((a == b) ? 0 : 1));
|
| + compareLists(b, a);
|
| + });
|
| + test('forEach', () {
|
| + List a = listFromList(ctor, [10, 11, 12, 13]);
|
| + int expected = 10;
|
| + int count = 0;
|
| + a.forEach((e) {
|
| + Expect.equals(expected, e);
|
| + expected++;
|
| + count++;
|
| + });
|
| + Expect.equals(a.length, count);
|
| + });
|
| + test('filter', () {
|
| + List a = listFromList(ctor, [10, 11, 12, 13]);
|
| + int expected = 10;
|
| + int count = 0;
|
| + List b = a.filter((e) {
|
| + Expect.equals(expected, e);
|
| + expected++;
|
| + count++;
|
| + return (e & 1) == 0;
|
| + });
|
| + Expect.equals(a.length, count);
|
| + compareLists(listFromList(ctor, [10, 12]), b);
|
| + });
|
| + test('map', () {
|
| + List a = listFromList(ctor, [10, 11, 12, 13]);
|
| + int expected = 10;
|
| + int count = 0;
|
| + List b = a.map((e) {
|
| + Expect.equals(expected, e);
|
| + expected++;
|
| + count++;
|
| + return e * 2;
|
| + });
|
| + Expect.equals(a.length, count);
|
| + compareLists(listFromList(ctor, [20, 22, 24, 26]), b);
|
| + });
|
| + test('every', () {
|
| + List a = listFromList(ctor, [10, 11, 12, 13]);
|
| + Expect.equals(true, a.every((e) => e >= 10));
|
| + Expect.equals(false, a.every((e) => e < 13));
|
| + });
|
| + test('some', () {
|
| + List a = listFromList(ctor, [10, 11, 12, 13]);
|
| + Expect.equals(true, a.some((e) => e == 13));
|
| + Expect.equals(false, a.some((e) => e == 14));
|
| + });
|
| + test('isEmpty', () {
|
| + Expect.equals(true, ctor(0).isEmpty());
|
| + Expect.equals(false, ctor(1).isEmpty());
|
| + });
|
| + test('iterator', () {
|
| + List a = listFromList(ctor, [10, 11, 12, 13]);
|
| + int expected = 10;
|
| + int count = 0;
|
| + Iterator i = a.iterator();
|
| + while (i.hasNext()) {
|
| + var e = i.next();
|
| + Expect.equals(expected, e);
|
| + expected++;
|
| + count++;
|
| + }
|
| + Expect.equals(a.length, count);
|
| + });
|
| + });
|
| +}
|
| +
|
| +main() {
|
| + test('ArrayBuffer', () {
|
| + ArrayBuffer a = new ArrayBuffer(100);
|
| + Expect.equals(a.byteLength, 100);
|
| + });
|
| +
|
| + void basicTest(TypedArrayBufferView a, int length,
|
| + int bytesPerElement) {
|
| + a[0] = 12;
|
| + Expect.equals(12, a[0]);
|
| + Expect.equals(bytesPerElement, a.BYTES_PER_ELEMENT);
|
| + Expect.equals(length, a.length);
|
| + Expect.equals(0, a.byteOffset);
|
| + Expect.equals(length * a.BYTES_PER_ELEMENT, a.byteLength);
|
| + Expect.equals(a.byteLength, a.buffer.byteLength);
|
| +
|
| + var sub = a.subarray(75);
|
| + Expect.equals(length - 75, sub.length, 'subarray length');
|
| + sub = a.subarray(2, 10);
|
| + Expect.equals(8, sub.length, 'subarray length 8');
|
| +
|
| + sub[0] = 13;
|
| + a.set(sub, 1);
|
| + Expect.equals(13, a[1], 'polymorphic set 2 args');
|
| +
|
| + sub[0] = 14;
|
| + a.set(sub, 0);
|
| + Expect.equals(14, a[0], 'polymorphic set 1 arg');
|
| + }
|
| +
|
| + group('Int8Array', () {
|
| + test('basic', () {
|
| + basicTest(new Int8Array(100), 100, 1);
|
| + });
|
| + listTest((length) => new Int8Array(length));
|
| + test('fromArray', () {
|
| + Int8Array a = new Int8Array(100);
|
| + a[0] = 12;
|
| + Int8Array b = new Int8Array.fromArray(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromList', () {
|
| + List<int> a = [12];
|
| + Int8Array b = new Int8Array.fromList(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromArrayBuffer 1 arg', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Int8Array b = new Int8Array.fromArrayBuffer(a);
|
| + Expect.equals(b.buffer, a);
|
| + Expect.equals(128, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 2 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Int8Array b = new Int8Array.fromArrayBuffer(a, 16);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(112, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 3 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Int8Array b = new Int8Array.fromArrayBuffer(a, 16, 3);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(3, b.length);
|
| + });
|
| + });
|
| +
|
| + group('Uint8Array', () {
|
| + test('basic', () {
|
| + basicTest(new Uint8Array(100), 100, 1);
|
| + });
|
| + listTest((length) => new Uint8Array(length));
|
| + test('fromArray', () {
|
| + Uint8Array a = new Uint8Array(100);
|
| + a[0] = 12;
|
| + Uint8Array b = new Uint8Array.fromArray(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromList', () {
|
| + List<int> a = [12];
|
| + Uint8Array b = new Uint8Array.fromList(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromArrayBuffer 1 arg', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Uint8Array b = new Uint8Array.fromArrayBuffer(a);
|
| + Expect.equals(b.buffer, a);
|
| + Expect.equals(128, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 2 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Uint8Array b = new Uint8Array.fromArrayBuffer(a, 16);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(112, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 3 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Uint8Array b = new Uint8Array.fromArrayBuffer(a, 16, 3);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(3, b.length);
|
| + });
|
| + });
|
| +
|
| + group('Int16Array', () {
|
| + test('basic', () {
|
| + basicTest(new Int16Array(100), 100, 2);
|
| + });
|
| + listTest((length) => new Int16Array(length));
|
| + test('fromArray', () {
|
| + Int16Array a = new Int16Array(100);
|
| + a[0] = 12;
|
| + Int16Array b = new Int16Array.fromArray(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromList', () {
|
| + List<int> a = [12];
|
| + Int16Array b = new Int16Array.fromList(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromArrayBuffer 1 arg', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Int16Array b = new Int16Array.fromArrayBuffer(a);
|
| + Expect.equals(b.buffer, a);
|
| + Expect.equals(128, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 2 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Int16Array b = new Int16Array.fromArrayBuffer(a, 16);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(112, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 3 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Int16Array b = new Int16Array.fromArrayBuffer(a, 16, 3);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(3, b.length);
|
| + });
|
| + });
|
| +
|
| + group('Uint16Array', () {
|
| + test('basic', () {
|
| + basicTest(new Uint16Array(100), 100, 2);
|
| + });
|
| + listTest((length) => new Uint16Array(length));
|
| + test('fromArray', () {
|
| + Uint16Array a = new Uint16Array(100);
|
| + a[0] = 12;
|
| + Uint16Array b = new Uint16Array.fromArray(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromList', () {
|
| + List<int> a = [12];
|
| + Uint16Array b = new Uint16Array.fromList(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromArrayBuffer 1 arg', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Uint16Array b = new Uint16Array.fromArrayBuffer(a);
|
| + Expect.equals(b.buffer, a);
|
| + Expect.equals(128, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 2 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Uint16Array b = new Uint16Array.fromArrayBuffer(a, 16);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(112, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 3 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Uint16Array b = new Uint16Array.fromArrayBuffer(a, 16, 3);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(3, b.length);
|
| + });
|
| + });
|
| +
|
| + group('Int32Array', () {
|
| + test('basic', () {
|
| + basicTest(new Int32Array(100), 100, 4);
|
| + });
|
| + listTest((length) => new Int32Array(length));
|
| + test('fromArray', () {
|
| + Int32Array a = new Int32Array(100);
|
| + a[0] = 12;
|
| + Int32Array b = new Int32Array.fromArray(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromList', () {
|
| + List<int> a = [12];
|
| + Int32Array b = new Int32Array.fromList(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromArrayBuffer 1 arg', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Int32Array b = new Int32Array.fromArrayBuffer(a);
|
| + Expect.equals(b.buffer, a);
|
| + Expect.equals(128, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 2 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Int32Array b = new Int32Array.fromArrayBuffer(a, 16);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(112, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 3 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Int32Array b = new Int32Array.fromArrayBuffer(a, 16, 3);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(3, b.length);
|
| + });
|
| + });
|
| +
|
| + group('Uint32Array', () {
|
| + test('basic', () {
|
| + basicTest(new Uint32Array(100), 100, 4);
|
| + });
|
| + listTest((length) => new Uint32Array(length));
|
| + test('fromArray', () {
|
| + Uint32Array a = new Uint32Array(100);
|
| + a[0] = 12;
|
| + Uint32Array b = new Uint32Array.fromArray(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromList', () {
|
| + List<int> a = [12];
|
| + Uint32Array b = new Uint32Array.fromList(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromArrayBuffer 1 arg', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Uint32Array b = new Uint32Array.fromArrayBuffer(a);
|
| + Expect.equals(b.buffer, a);
|
| + Expect.equals(128, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 2 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Uint32Array b = new Uint32Array.fromArrayBuffer(a, 16);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(112, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 3 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Uint32Array b = new Uint32Array.fromArrayBuffer(a, 16, 3);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(3, b.length);
|
| + });
|
| + });
|
| +
|
| + group('Float32Array', () {
|
| + test('basic', () {
|
| + basicTest(new Float32Array(100), 100, 4);
|
| + });
|
| + listTest((length) => new Float32Array(length));
|
| + test('fromArray', () {
|
| + Float32Array a = new Float32Array(100);
|
| + a[0] = 0.5;
|
| + Float32Array b = new Float32Array.fromArray(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromList', () {
|
| + List<double> a = [0.5];
|
| + Float32Array b = new Float32Array.fromList(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromArrayBuffer 1 arg', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Float32Array b = new Float32Array.fromArrayBuffer(a);
|
| + Expect.equals(b.buffer, a);
|
| + Expect.equals(128, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 2 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Float32Array b = new Float32Array.fromArrayBuffer(a, 16);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(112, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 3 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Float32Array b = new Float32Array.fromArrayBuffer(a, 16, 3);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(3, b.length);
|
| + });
|
| + });
|
| +
|
| + group('Float64Array', () {
|
| + test('basic', () {
|
| + basicTest(new Float64Array(100), 100, 8);
|
| + });
|
| + listTest((length) => new Float64Array(length));
|
| + test('fromArray', () {
|
| + Float64Array a = new Float64Array(100);
|
| + a[0] = 0.5;
|
| + Float64Array b = new Float64Array.fromArray(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromList', () {
|
| + List<double> a = [0.5];
|
| + Float64Array b = new Float64Array.fromList(a);
|
| + Expect.equals(a[0], b[0]);
|
| + });
|
| + test('fromArrayBuffer 1 arg', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Float64Array b = new Float64Array.fromArrayBuffer(a);
|
| + Expect.equals(b.buffer, a);
|
| + Expect.equals(128, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 2 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Float64Array b = new Float64Array.fromArrayBuffer(a, 16);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(112, b.length * b.BYTES_PER_ELEMENT);
|
| + });
|
| + test('fromArrayBuffer 3 args', () {
|
| + ArrayBuffer a = new ArrayBuffer(128);
|
| + Float64Array b = new Float64Array.fromArrayBuffer(a, 16, 3);
|
| + Expect.equals(a, b.buffer);
|
| + Expect.equals(3, b.length);
|
| + });
|
| + });
|
| +
|
| + test('DataView', () {
|
| + Int8Array bytes = new Int8Array.fromList([0, -1, 2, 3, 4, 5]);
|
| + DataView d = new DataView.fromArray(bytes.buffer);
|
| + Expect.equals(bytes.buffer, d.buffer);
|
| + Expect.equals(0, d.byteOffset);
|
| + Expect.equals(6, d.byteLength);
|
| +
|
| + Expect.equals(-1, d.getInt8(1));
|
| +
|
| + Expect.equals(0xff, d.getUint8(1));
|
| +
|
| + Expect.equals(0x0203, d.getInt16(2));
|
| + Expect.equals(0x0203, d.getInt16(2, false));
|
| + Expect.equals(0x0302, d.getInt16(2, true));
|
| +
|
| + Expect.equals(0x0203, d.getUint16(2));
|
| + Expect.equals(0x0203, d.getUint16(2, false));
|
| + Expect.equals(0x0302, d.getUint16(2, true));
|
| +
|
| + Expect.equals(0x02030405, d.getInt32(2));
|
| + Expect.equals(0x02030405, d.getInt32(2, false));
|
| + Expect.equals(0x05040302, d.getInt32(2, true));
|
| +
|
| + Expect.equals(0x02030405, d.getUint32(2));
|
| + Expect.equals(0x02030405, d.getUint32(2, false));
|
| + Expect.equals(0x05040302, d.getUint32(2, true));
|
| +
|
| + Int8Array floatBytes = new Int8Array.fromList([0x3f, 0x80, 0x00, 0x00]);
|
| + d = new DataView.fromArray(floatBytes.buffer);
|
| + Expect.equals(1.0, d.getFloat32(0));
|
| +
|
| + Int8Array doubleBytes = new Int8Array.fromList(
|
| + [0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
|
| + d = new DataView.fromArray(doubleBytes.buffer);
|
| + Expect.equals(1.0, d.getFloat64(0));
|
| +
|
| + d = new DataView.fromArray(new ArrayBuffer(8));
|
| + d.setInt8(0, -5);
|
| + Expect.equals(-5, d.getInt8(0));
|
| + d.setUint8(0, -5);
|
| + Expect.equals(0xfb, d.getUint8(0));
|
| + d.setInt16(0, -5);
|
| + Expect.equals(-5, d.getInt16(0));
|
| + d.setUint16(0, -5);
|
| + Expect.equals(0xfffb, d.getUint16(0));
|
| + d.setInt32(0, -5);
|
| + Expect.equals(-5, d.getInt32(0));
|
| + d.setUint32(0, -5);
|
| + Expect.equals(0xfffffffb, d.getUint32(0));
|
| + d.setFloat32(0, 2.0);
|
| + Expect.equals(2.0, d.getFloat32(0));
|
| + d.setFloat64(0, 2.0);
|
| + Expect.equals(2.0, d.getFloat64(0));
|
| + });
|
| +}
|
|
|