blob: c23f629c1290099de2f55e29412da4951235584e [file] [log] [blame]
// |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();