blob: e5bf9b3ee5ba78ca589864b52ecd02c56e9d2d78 [file] [log] [blame]
// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
var BUGNUMBER = 939715;
var summary = 'method instance.map';
/*
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/licenses/publicdomain/
*/
var ArrayType = TypedObject.ArrayType;
var StructType = TypedObject.StructType;
var uint8 = TypedObject.uint8;
var uint16 = TypedObject.uint16;
var uint32 = TypedObject.uint32;
var uint8Clamped = TypedObject.uint8Clamped;
var int8 = TypedObject.int8;
var int16 = TypedObject.int16;
var int32 = TypedObject.int32;
var float32 = TypedObject.float32;
var float64 = TypedObject.float64;
// Test name format:
// map<N>DimArrayOf<G1>sTo<G2>s where <N> is a positive integer (or its
// equivalent word in English) and <G1> and <G2> are both grain types
// (potentially an array themselves.)
function mapOneDimArrayOfUint8() {
var type = uint8.array(4);
var i1 = type.build(i => i);
var r1 = i1.map(j => j*200);
var r2 = i1.map(1, j => j*200);
assertTypedEqual(type, r1, new type([0, 200, 400 % 256, 600 % 256]));
assertTypedEqual(type, r1, r2);
}
function mapOneDimArrayOfUint32() {
var type = uint32.array(4);
var i1 = type.build(i => i);
var r1 = i1.map(j => j*200);
var r2 = i1.map(1, j => j*200);
assertTypedEqual(type, r1, new type([0, 200, 400, 600]));
assertTypedEqual(type, r1, r2);
}
function mapTwoDimArrayOfUint8() {
var type = uint8.array(4).array(4);
var i1 = new type([[10, 11, 12, 13],
[20, 21, 22, 23],
[30, 31, 32, 33],
[40, 41, 42, 43]]);
var r1 = i1.map(2, x => x*2);
var r2 = i1.map(1, a => a.map(1, x => x*2));
var r3 = i1.map(1, (a, j, c, out) => { out[0] = a[0]*2;
out[1] = a[1]*2;
out[2] = a[2]*2;
out[3] = a[3]*2; });
assertTypedEqual(type, r1, new type([[20, 22, 24, 26],
[40, 42, 44, 46],
[60, 62, 64, 66],
[80, 82, 84, 86]]));
assertTypedEqual(type, r1, r2);
assertTypedEqual(type, r1, r3);
}
function mapTwoDimArrayOfUint32() {
var type = uint32.array(4).array(4);
var i1 = new type([[10, 11, 12, 13],
[20, 21, 22, 23],
[30, 31, 32, 33],
[40, 41, 42, 43]]);
var r1 = i1.map(2, x => x*2);
var r2 = i1.map(1, a => a.map(1, x => x*2));
var r3 = i1.map(1, (a, j, c, out) => { out[0] = a[0]*2;
out[1] = a[1]*2;
out[2] = a[2]*2;
out[3] = a[3]*2; });
assertTypedEqual(type, r1, new type([[20, 22, 24, 26],
[40, 42, 44, 46],
[60, 62, 64, 66],
[80, 82, 84, 86]]));
assertTypedEqual(type, r1, r2);
assertTypedEqual(type, r1, r3);
}
var Grain = new StructType({f: uint32});
function wrapG(v) { return new Grain({f: v}); }
function doubleG(g) { return new Grain({f: g.f * 2}); }
function tenG(x, y) { return new Grain({f: x * 10 + y}); }
function mapOneDimArrayOfStructs() {
var type = Grain.array(4);
var i1 = type.build(wrapG);
var r1 = i1.map(doubleG);
var r2 = i1.map(1, doubleG);
var r3 = i1.map(1, (g, j, c, out) => { out.f = g.f * 2; });
assertTypedEqual(type, r1, new type([{f:0}, {f:2},
{f:4}, {f:6}]));
assertTypedEqual(type, r1, r2);
assertTypedEqual(type, r1, r3);
}
function mapTwoDimArrayOfStructs() {
var rowtype = Grain.array(2);
var type = rowtype.array(2);
var i1 = type.build(2, tenG);
var r1 = i1.map(2, doubleG);
var r2 = i1.map(1, (m) => m.map(1, doubleG));
var r3 = i1.map(1, (m, j, c, out) => { out[0].f = m[0].f * 2;
out[1].f = m[1].f * 2; });
assertTypedEqual(type, r1, new type([[{f:00}, {f:02}],
[{f:20}, {f:22}]]));
assertTypedEqual(type, r1, r2);
assertTypedEqual(type, r1, r3);
}
function runTests() {
print(BUGNUMBER + ": " + summary);
mapOneDimArrayOfUint8();
mapOneDimArrayOfUint32();
mapTwoDimArrayOfUint8();
mapTwoDimArrayOfUint32();
mapOneDimArrayOfStructs();
mapTwoDimArrayOfStructs();
if (typeof reportCompare === "function")
reportCompare(true, true);
print("Tests complete");
}
runTests();