mirror of https://github.com/tc39/test262.git
495 lines
13 KiB
JavaScript
Executable File
495 lines
13 KiB
JavaScript
Executable File
// Copyright (C) 2015 André Bargull. All rights reserved.
|
|
// This code is governed by the BSD license found in the LICENSE file.
|
|
|
|
/**
|
|
* Array containing every typed array constructor.
|
|
*/
|
|
var typedArrayConstructors = [
|
|
Float64Array,
|
|
Float32Array,
|
|
Int32Array,
|
|
Int16Array,
|
|
Int8Array,
|
|
Uint32Array,
|
|
Uint16Array,
|
|
Uint8Array,
|
|
Uint8ClampedArray
|
|
];
|
|
|
|
/**
|
|
* The %TypedArray% intrinsic constructor function.
|
|
*/
|
|
var TypedArray = Object.getPrototypeOf(Int8Array);
|
|
|
|
/**
|
|
* Callback for testing a typed array constructor.
|
|
*
|
|
* @callback typedArrayConstructorCallback
|
|
* @param {Function} Constructor the constructor object to test with.
|
|
*/
|
|
|
|
/**
|
|
* Calls the provided function for every typed array constructor.
|
|
*
|
|
* @param {typedArrayConstructorCallback} f - the function to call for each typed array constructor.
|
|
* @param {Array} selected - An optional Array with filtered typed arrays
|
|
*/
|
|
function testWithTypedArrayConstructors(f, selected) {
|
|
var constructors = selected || typedArrayConstructors;
|
|
for (var i = 0; i < constructors.length; ++i) {
|
|
var constructor = constructors[i];
|
|
try {
|
|
f(constructor);
|
|
} catch (e) {
|
|
e.message += " (Testing with " + constructor.name + ".)";
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Helper for conversion operations on TypedArrays, the expected values
|
|
* properties are indexed in order to match the respective value for each
|
|
* TypedArray constructor
|
|
* @param {Function} fn - the function to call for each constructor and value.
|
|
* will be called with the constructor, value, expected
|
|
* value, and a initial value that can be used to avoid
|
|
* a false positive with an equivalent expected value.
|
|
*/
|
|
function testTypedArrayConversions(fn) {
|
|
var values = [
|
|
127, // 2 ** 7 - 1
|
|
128, // 2 ** 7
|
|
32767, // 2 ** 15 - 1
|
|
32768, // 2 ** 15
|
|
2147483647, // 2 ** 31 - 1
|
|
2147483648, // 2 ** 31
|
|
255, // 2 ** 8 - 1
|
|
256, // 2 ** 8
|
|
65535, // 2 ** 16 - 1
|
|
65536, // 2 ** 16
|
|
4294967295, // 2 ** 32 - 1
|
|
4294967296, // 2 ** 32
|
|
9007199254740991, // 2 ** 53 - 1
|
|
9007199254740992, // 2 ** 53
|
|
1.1,
|
|
0.1,
|
|
0.5,
|
|
0.50000001,
|
|
0.6,
|
|
0.7,
|
|
undefined,
|
|
-1,
|
|
-0,
|
|
-0.1,
|
|
-1.1,
|
|
NaN,
|
|
-127, // - ( 2 ** 7 - 1 )
|
|
-128, // - ( 2 ** 7 )
|
|
-32767, // - ( 2 ** 15 - 1 )
|
|
-32768, // - ( 2 ** 15 )
|
|
-2147483647, // - ( 2 ** 31 - 1 )
|
|
-2147483648, // - ( 2 ** 31 )
|
|
-255, // - ( 2 ** 8 - 1 )
|
|
-256, // - ( 2 ** 8 )
|
|
-65535, // - ( 2 ** 16 - 1 )
|
|
-65536, // - ( 2 ** 16 )
|
|
-4294967295, // - ( 2 ** 32 - 1 )
|
|
-4294967296, // - ( 2 ** 32 )
|
|
Infinity,
|
|
-Infinity,
|
|
];
|
|
|
|
var expected = {
|
|
Int8Array: [
|
|
127, // 127
|
|
-128, // 128
|
|
-1, // 32767
|
|
0, // 32768
|
|
-1, // 2147483647
|
|
0, // 2147483648
|
|
-1, // 255
|
|
0, // 256
|
|
-1, // 65535
|
|
0, // 65536
|
|
-1, // 4294967295
|
|
0, // 4294967296
|
|
-1, // 9007199254740991
|
|
0, // 9007199254740992
|
|
1, // 1.1
|
|
0, // 0.1
|
|
0, // 0.5
|
|
0, // 0.50000001,
|
|
0, // 0.6
|
|
0, // 0.7
|
|
0, // undefined
|
|
-1, // -1
|
|
0, // -0
|
|
0, // -0.1
|
|
-1, // -1.1
|
|
0, // NaN
|
|
-127, // -127
|
|
-128, // -128
|
|
1, // -32767
|
|
0, // -32768
|
|
1, // -2147483647
|
|
0, // -2147483648
|
|
1, // -255
|
|
0, // -256
|
|
1, // -65535
|
|
0, // -65536
|
|
1, // -4294967295
|
|
0, // -4294967296
|
|
0, // Infinity
|
|
0, // -Infinity
|
|
],
|
|
Uint8Array: [
|
|
127, // 127
|
|
128, // 128
|
|
255, // 32767
|
|
0, // 32768
|
|
255, // 2147483647
|
|
0, // 2147483648
|
|
255, // 255
|
|
0, // 256
|
|
255, // 65535
|
|
0, // 65536
|
|
255, // 4294967295
|
|
0, // 4294967296
|
|
255, // 9007199254740991
|
|
0, // 9007199254740992
|
|
1, // 1.1
|
|
0, // 0.1
|
|
0, // 0.5
|
|
0, // 0.50000001,
|
|
0, // 0.6
|
|
0, // 0.7
|
|
0, // undefined
|
|
255, // -1
|
|
0, // -0
|
|
0, // -0.1
|
|
255, // -1.1
|
|
0, // NaN
|
|
129, // -127
|
|
128, // -128
|
|
1, // -32767
|
|
0, // -32768
|
|
1, // -2147483647
|
|
0, // -2147483648
|
|
1, // -255
|
|
0, // -256
|
|
1, // -65535
|
|
0, // -65536
|
|
1, // -4294967295
|
|
0, // -4294967296
|
|
0, // Infinity
|
|
0, // -Infinity
|
|
],
|
|
Uint8ClampedArray: [
|
|
127, // 127
|
|
128, // 128
|
|
255, // 32767
|
|
255, // 32768
|
|
255, // 2147483647
|
|
255, // 2147483648
|
|
255, // 255
|
|
255, // 256
|
|
255, // 65535
|
|
255, // 65536
|
|
255, // 4294967295
|
|
255, // 4294967296
|
|
255, // 9007199254740991
|
|
255, // 9007199254740992
|
|
1, // 1.1,
|
|
0, // 0.1
|
|
0, // 0.5
|
|
1, // 0.50000001,
|
|
1, // 0.6
|
|
1, // 0.7
|
|
0, // undefined
|
|
0, // -1
|
|
0, // -0
|
|
0, // -0.1
|
|
0, // -1.1
|
|
0, // NaN
|
|
0, // -127
|
|
0, // -128
|
|
0, // -32767
|
|
0, // -32768
|
|
0, // -2147483647
|
|
0, // -2147483648
|
|
0, // -255
|
|
0, // -256
|
|
0, // -65535
|
|
0, // -65536
|
|
0, // -4294967295
|
|
0, // -4294967296
|
|
255, // Infinity
|
|
0, // -Infinity
|
|
],
|
|
Int16Array: [
|
|
127, // 127
|
|
128, // 128
|
|
32767, // 32767
|
|
-32768, // 32768
|
|
-1, // 2147483647
|
|
0, // 2147483648
|
|
255, // 255
|
|
256, // 256
|
|
-1, // 65535
|
|
0, // 65536
|
|
-1, // 4294967295
|
|
0, // 4294967296
|
|
-1, // 9007199254740991
|
|
0, // 9007199254740992
|
|
1, // 1.1
|
|
0, // 0.1
|
|
0, // 0.5
|
|
0, // 0.50000001,
|
|
0, // 0.6
|
|
0, // 0.7
|
|
0, // undefined
|
|
-1, // -1
|
|
0, // -0
|
|
0, // -0.1
|
|
-1, // -1.1
|
|
0, // NaN
|
|
-127, // -127
|
|
-128, // -128
|
|
-32767, // -32767
|
|
-32768, // -32768
|
|
1, // -2147483647
|
|
0, // -2147483648
|
|
-255, // -255
|
|
-256, // -256
|
|
1, // -65535
|
|
0, // -65536
|
|
1, // -4294967295
|
|
0, // -4294967296
|
|
0, // Infinity
|
|
0, // -Infinity
|
|
],
|
|
Uint16Array: [
|
|
127, // 127
|
|
128, // 128
|
|
32767, // 32767
|
|
32768, // 32768
|
|
65535, // 2147483647
|
|
0, // 2147483648
|
|
255, // 255
|
|
256, // 256
|
|
65535, // 65535
|
|
0, // 65536
|
|
65535, // 4294967295
|
|
0, // 4294967296
|
|
65535, // 9007199254740991
|
|
0, // 9007199254740992
|
|
1, // 1.1
|
|
0, // 0.1
|
|
0, // 0.5
|
|
0, // 0.50000001,
|
|
0, // 0.6
|
|
0, // 0.7
|
|
0, // undefined
|
|
65535, // -1
|
|
0, // -0
|
|
0, // -0.1
|
|
65535, // -1.1
|
|
0, // NaN
|
|
65409, // -127
|
|
65408, // -128
|
|
32769, // -32767
|
|
32768, // -32768
|
|
1, // -2147483647
|
|
0, // -2147483648
|
|
65281, // -255
|
|
65280, // -256
|
|
1, // -65535
|
|
0, // -65536
|
|
1, // -4294967295
|
|
0, // -4294967296
|
|
0, // Infinity
|
|
0, // -Infinity
|
|
],
|
|
Int32Array: [
|
|
127, // 127
|
|
128, // 128
|
|
32767, // 32767
|
|
32768, // 32768
|
|
2147483647, // 2147483647
|
|
-2147483648, // 2147483648
|
|
255, // 255
|
|
256, // 256
|
|
65535, // 65535
|
|
65536, // 65536
|
|
-1, // 4294967295
|
|
0, // 4294967296
|
|
-1, // 9007199254740991
|
|
0, // 9007199254740992
|
|
1, // 1.1
|
|
0, // 0.1
|
|
0, // 0.5
|
|
0, // 0.50000001,
|
|
0, // 0.6
|
|
0, // 0.7
|
|
0, // undefined
|
|
-1, // -1
|
|
0, // -0
|
|
0, // -0.1
|
|
-1, // -1.1
|
|
0, // NaN
|
|
-127, // -127
|
|
-128, // -128
|
|
-32767, // -32767
|
|
-32768, // -32768
|
|
-2147483647, // -2147483647
|
|
-2147483648, // -2147483648
|
|
-255, // -255
|
|
-256, // -256
|
|
-65535, // -65535
|
|
-65536, // -65536
|
|
1, // -4294967295
|
|
0, // -4294967296
|
|
0, // Infinity
|
|
0, // -Infinity
|
|
],
|
|
Uint32Array: [
|
|
127, // 127
|
|
128, // 128
|
|
32767, // 32767
|
|
32768, // 32768
|
|
2147483647, // 2147483647
|
|
2147483648, // 2147483648
|
|
255, // 255
|
|
256, // 256
|
|
65535, // 65535
|
|
65536, // 65536
|
|
4294967295, // 4294967295
|
|
0, // 4294967296
|
|
4294967295, // 9007199254740991
|
|
0, // 9007199254740992
|
|
1, // 1.1
|
|
0, // 0.1
|
|
0, // 0.5
|
|
0, // 0.50000001,
|
|
0, // 0.6
|
|
0, // 0.7
|
|
0, // undefined
|
|
4294967295, // -1
|
|
0, // -0
|
|
0, // -0.1
|
|
4294967295, // -1.1
|
|
0, // NaN
|
|
4294967169, // -127
|
|
4294967168, // -128
|
|
4294934529, // -32767
|
|
4294934528, // -32768
|
|
2147483649, // -2147483647
|
|
2147483648, // -2147483648
|
|
4294967041, // -255
|
|
4294967040, // -256
|
|
4294901761, // -65535
|
|
4294901760, // -65536
|
|
1, // -4294967295
|
|
0, // -4294967296
|
|
0, // Infinity
|
|
0, // -Infinity
|
|
],
|
|
Float32Array: [
|
|
127, // 127
|
|
128, // 128
|
|
32767, // 32767
|
|
32768, // 32768
|
|
2147483648, // 2147483647
|
|
2147483648, // 2147483648
|
|
255, // 255
|
|
256, // 256
|
|
65535, // 65535
|
|
65536, // 65536
|
|
4294967296, // 4294967295
|
|
4294967296, // 4294967296
|
|
9007199254740992, // 9007199254740991
|
|
9007199254740992, // 9007199254740992
|
|
1.100000023841858, // 1.1
|
|
0.10000000149011612, // 0.1
|
|
0.5, // 0.5
|
|
0.5, // 0.50000001,
|
|
0.6000000238418579, // 0.6
|
|
0.699999988079071, // 0.7
|
|
NaN, // undefined
|
|
-1, // -1
|
|
-0, // -0
|
|
-0.10000000149011612, // -0.1
|
|
-1.100000023841858, // -1.1
|
|
NaN, // NaN
|
|
-127, // -127
|
|
-128, // -128
|
|
-32767, // -32767
|
|
-32768, // -32768
|
|
-2147483648, // -2147483647
|
|
-2147483648, // -2147483648
|
|
-255, // -255
|
|
-256, // -256
|
|
-65535, // -65535
|
|
-65536, // -65536
|
|
-4294967296, // -4294967295
|
|
-4294967296, // -4294967296
|
|
Infinity, // Infinity
|
|
-Infinity, // -Infinity
|
|
],
|
|
Float64Array: [
|
|
127, // 127
|
|
128, // 128
|
|
32767, // 32767
|
|
32768, // 32768
|
|
2147483647, // 2147483647
|
|
2147483648, // 2147483648
|
|
255, // 255
|
|
256, // 256
|
|
65535, // 65535
|
|
65536, // 65536
|
|
4294967295, // 4294967295
|
|
4294967296, // 4294967296
|
|
9007199254740991, // 9007199254740991
|
|
9007199254740992, // 9007199254740992
|
|
1.1, // 1.1
|
|
0.1, // 0.1
|
|
0.5, // 0.5
|
|
0.50000001, // 0.50000001,
|
|
0.6, // 0.6
|
|
0.7, // 0.7
|
|
NaN, // undefined
|
|
-1, // -1
|
|
-0, // -0
|
|
-0.1, // -0.1
|
|
-1.1, // -1.1
|
|
NaN, // NaN
|
|
-127, // -127
|
|
-128, // -128
|
|
-32767, // -32767
|
|
-32768, // -32768
|
|
-2147483647, // -2147483647
|
|
-2147483648, // -2147483648
|
|
-255, // -255
|
|
-256, // -256
|
|
-65535, // -65535
|
|
-65536, // -65536
|
|
-4294967295, // -4294967295
|
|
-4294967296, // -4294967296
|
|
Infinity, // Infinity
|
|
-Infinity, // -Infinity
|
|
]
|
|
};
|
|
|
|
testWithTypedArrayConstructors(function(TA) {
|
|
return values.forEach(function(value, index) {
|
|
var exp = expected[TA.name][index];
|
|
var initial = 0;
|
|
if (exp === 0) {
|
|
initial = 1;
|
|
}
|
|
fn(TA, value, exp, initial);
|
|
});
|
|
});
|
|
}
|