// |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: // mapDimArrayOfsTos where is a positive integer (or its // equivalent word in English) and and 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();