Bug 1108807: Group SIMD.js shift tests; r=till

This commit is contained in:
Benjamin Bouvier 2014-12-10 13:26:00 +01:00
parent 38ea6ab216
commit 5c7fc3839d
5 changed files with 47 additions and 104 deletions

View File

@ -1,35 +0,0 @@
// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
var BUGNUMBER = 996076;
var float32x4 = SIMD.float32x4;
var int32x4 = SIMD.int32x4;
var summary = 'int32x4 lsh';
function test() {
print(BUGNUMBER + ": " + summary);
for (var bits = 0; bits < 32; bits++) {
var a = int32x4(-1, 2, -3, 4);
var c = SIMD.int32x4.shiftLeftByScalar(a, bits);
assertEq(c.x, -1 << bits);
assertEq(c.y, 2 << bits);
assertEq(c.z, -3 << bits);
assertEq(c.w, 4 << bits);
}
var INT32_MAX = Math.pow(2, 31) - 1;
var INT32_MIN = -Math.pow(2, 31);
var d = int32x4(INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN);
var f = SIMD.int32x4.shiftLeftByScalar(d, 1);
assertEq(f.x, (INT32_MAX << 1) | 0);
assertEq(f.y, (INT32_MIN << 1) | 0);
assertEq(f.z, (INT32_MAX << 1) | 0);
assertEq(f.w, (INT32_MIN << 1) | 0);
if (typeof reportCompare === "function")
reportCompare(true, true);
}
test();

View File

@ -1,34 +0,0 @@
// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
var BUGNUMBER = 996076;
var float32x4 = SIMD.float32x4;
var int32x4 = SIMD.int32x4;
var summary = 'int32x4 rsh';
function test() {
print(BUGNUMBER + ": " + summary);
for (var bits = 0; bits < 32; bits++) {
var a = int32x4(-1, 2, -3, 4);
var c = SIMD.int32x4.shiftRightArithmeticByScalar(a, bits);
assertEq(c.x, -1 >> bits);
assertEq(c.y, 2 >> bits);
assertEq(c.z, -3 >> bits);
assertEq(c.w, 4 >> bits);
}
var INT32_MAX = Math.pow(2, 31) - 1;
var INT32_MIN = -Math.pow(2, 31);
var d = int32x4(INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN);
var f = SIMD.int32x4.shiftRightArithmeticByScalar(d, 1);
assertEq(f.x, INT32_MAX >> 1);
assertEq(f.y, INT32_MIN >> 1);
assertEq(f.z, INT32_MAX >> 1);
assertEq(f.w, INT32_MIN >> 1);
if (typeof reportCompare === "function")
reportCompare(true, true);
}
test();

View File

@ -1,35 +0,0 @@
// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
var BUGNUMBER = 996076;
var float32x4 = SIMD.float32x4;
var int32x4 = SIMD.int32x4;
var summary = 'int32x4 ursh';
function test() {
print(BUGNUMBER + ": " + summary);
for (var bits = 0; bits < 32; bits++) {
var a = int32x4(-1, 2, -3, 4);
var c = SIMD.int32x4.shiftRightLogicalByScalar(a, bits);
assertEq(c.x >>> 0, -1 >>> bits);
assertEq(c.y >>> 0, 2 >>> bits);
assertEq(c.z >>> 0, -3 >>> bits);
assertEq(c.w >>> 0, 4 >>> bits);
}
var INT32_MAX = Math.pow(2, 31) - 1;
var INT32_MIN = -Math.pow(2, 31);
var d = int32x4(INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN);
var f = SIMD.int32x4.shiftRightLogicalByScalar(d, 0);
assertEq(f.x, (INT32_MAX >>> 0) | 0);
assertEq(f.y, (INT32_MIN >>> 0) | 0);
assertEq(f.z, (INT32_MAX >>> 0) | 0);
assertEq(f.w, (INT32_MIN >>> 0) | 0);
if (typeof reportCompare === "function")
reportCompare(true, true);
}
test();

View File

@ -28,3 +28,13 @@ function testBinaryFunc(v, w, simdFunc, func) {
for (var i = 0; i < observed.length; i++)
assertEq(observed[i], expected[i]);
}
function testBinaryScalarFunc(v, scalar, simdFunc, func) {
var varr = simdToArray(v);
var observed = simdToArray(simdFunc(v, scalar));
var expected = varr.map(function(v, i) { return func(varr[i], scalar); });
for (var i = 0; i < observed.length; i++)
assertEq(observed[i], expected[i]);
}

View File

@ -0,0 +1,37 @@
// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
/*
* Any copyright is dedicated to the Public Domain.
* https://creativecommons.org/publicdomain/zero/1.0/
*/
var int32x4 = SIMD.int32x4;
function lsh(a, b) {
return (a << b) | 0;
}
function rsh(a, b) {
return (a >> b) | 0;
}
function ursh(a, b) {
return (a >>> b) | 0;
}
function test() {
for (var v of [
int32x4(-1, 2, -3, 4),
int32x4(INT32_MAX, INT32_MIN, INT32_MAX - 1, INT32_MIN + 1)
])
{
for (var bits = 0; bits < 32; bits++) {
testBinaryScalarFunc(v, bits, int32x4.shiftLeftByScalar, lsh);
testBinaryScalarFunc(v, bits, int32x4.shiftRightArithmeticByScalar, rsh);
testBinaryScalarFunc(v, bits, int32x4.shiftRightLogicalByScalar, ursh);
}
}
if (typeof reportCompare === "function")
reportCompare(true, true);
}
test();