// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) var BUGNUMBER = 939715; var summary = 'method type.build'; /* * 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; function oneDimensionalArrayOfUints() { var grain = uint32; var type = grain.array(4); var r1 = type.build(x => x * 2); assertTypedEqual(type, r1, new type([0, 2, 4, 6])); } function oneDimensionalArrayOfStructs() { var grain = new StructType({f: uint32}); var type = grain.array(4); var r1 = type.build(x => new grain({f: x * 2})); var r2 = type.build((x, out) => { out.f = x * 2; }); assertTypedEqual(type, r1, new type([{f:0}, {f:2}, {f:4}, {f:6}])); assertTypedEqual(type, r1, r2); } // At an attempt at readability, the tests below all try to build up // numbers where there is a one-to-one mapping between input dimension // and base-10 digit in the output. // // (Note that leading zeros must be elided in the expected-values to // avoid inadvertantly interpreting the numbers as octal constants.) function twoDimensionalArrayOfStructsWithDepth2() { var grain = new StructType({f: uint32}); var type = grain.array(2, 2); var r1 = type.build(2, (x, y) => { return new grain({f: x * 10 + y}); }); var r2 = type.build(2, (x, y, out) => { out.f = x * 10 + y; }); assertTypedEqual(type, r1, new type([[{f: 0}, {f: 1}], [{f:10}, {f:11}]])); assertTypedEqual(type, r1, r2); } function twoDimensionalArrayOfStructsWithDepth1() { var grain = new StructType({f: uint32}).array(2); var type = grain.array(2); var r1 = type.build((x) => { return new grain([{f: x * 10}, {f: x * 10 + 1}]); }); var r2 = type.build(1, (x, out) => { out[0].f = x * 10 + 0; out[1].f = x * 10 + 1; }); assertTypedEqual(type, r1, new type([[{f: 0}, {f: 1}], [{f:10}, {f:11}]])); assertTypedEqual(type, r1, r2); } function threeDimensionalArrayOfUintsWithDepth3() { var grain = uint32; var type = grain.array(2).array(2).array(2); var r1 = type.build(3, (x,y,z) => x * 100 + y * 10 + z); assertTypedEqual(type, r1, new type([[[ 0, 1], [ 10, 11]], [[100, 101], [110, 111]]])); } function threeDimensionalArrayOfUintsWithDepth2() { var grain = uint32.array(2); var type = grain.array(2).array(2); var r1 = type.build(2, (x,y) => [x * 100 + y * 10 + 0, x * 100 + y * 10 + 1]); var r1b = type.build(2, (x,y) => grain.build(z => x * 100 + y * 10 + z)); var r1c = type.build(2, (x,y) => grain.build(1, z => x * 100 + y * 10 + z)); var r2 = type.build(2, (x,y, out) => { out[0] = x * 100 + y * 10 + 0; out[1] = x * 100 + y * 10 + 1; }); assertTypedEqual(type, r1, new type([[[ 0, 1], [ 10, 11]], [[100, 101], [110, 111]]])); assertTypedEqual(type, r1, r1b); assertTypedEqual(type, r1, r1c); assertTypedEqual(type, r1, r2); } function threeDimensionalArrayOfUintsWithDepth1() { var grain = uint32.array(2).array(2); var type = grain.array(2); var r1 = type.build(1, (x) => grain.build(y => [x * 100 + y * 10 + 0, x * 100 + y * 10 + 1])); var r1b = type.build(1, (x) => grain.build(1, y => [x * 100 + y * 10 + 0, x * 100 + y * 10 + 1])); var r1c = type.build(1, (x) => grain.build(2, (y,z) => x * 100 + y * 10 + z)); var r2 = type.build(1, (x, out) => { out[0][0] = x * 100 + 0 * 10 + 0; out[0][1] = x * 100 + 0 * 10 + 1; out[1][0] = x * 100 + 1 * 10 + 0; out[1][1] = x * 100 + 1 * 10 + 1; }); assertTypedEqual(type, r1, new type([[[ 0, 1], [ 10, 11]], [[100, 101], [110, 111]]])); assertTypedEqual(type, r1, r1b); assertTypedEqual(type, r1, r1c); assertTypedEqual(type, r1, r2); } function runTests() { print(BUGNUMBER + ": " + summary); oneDimensionalArrayOfUints(); oneDimensionalArrayOfStructs(); twoDimensionalArrayOfStructsWithDepth2(); twoDimensionalArrayOfStructsWithDepth1(); threeDimensionalArrayOfUintsWithDepth3(); threeDimensionalArrayOfUintsWithDepth2(); threeDimensionalArrayOfUintsWithDepth1(); if (typeof reportCompare === "function") reportCompare(true, true); print("Tests complete"); } runTests();