| /* |
| * Any copyright is dedicated to the Public Domain. |
| * http://creativecommons.org/licenses/publicdomain/ |
| */ |
| |
| var gTestfile = 'element-setting-converts-using-ToNumber.js'; |
| //----------------------------------------------------------------------------- |
| var BUGNUMBER = 985733; |
| var summary = |
| "Typed array element-setting should convert to target type using ToNumber " |
| "followed by an element-type-specific truncation function"; |
| |
| print(BUGNUMBER + ": " + summary); |
| |
| /************** |
| * BEGIN TEST * |
| **************/ |
| |
| var ctors = [Int8Array, Uint8Array, Uint8ClampedArray, |
| Int16Array, Uint16Array, |
| Int32Array, Uint32Array, |
| Float32Array, Float64Array]; |
| ctors.forEach(function(TypedArray) { |
| var ta = new TypedArray(1); |
| assertEq(ta[0], 0); |
| |
| var count = 0; |
| function setToObject() |
| { |
| for (var i = 0; i < 1e4; i++) |
| { |
| assertEq(count, i); |
| ta[0] = { valueOf: function() { count++; return 17; } }; |
| } |
| } |
| setToObject(); |
| assertEq(count, 1e4); |
| assertEq(ta[0], 17); |
| |
| function setToString() |
| { |
| for (var i = 0; i < 2e4; i++) |
| ta[0] = "17.0000000000000000000000000000000000000000000000000000001"; |
| } |
| setToString(); |
| assertEq(ta[0], 17); |
| |
| count = 0; |
| var arrayConstructed = |
| new TypedArray([{ valueOf: function() { count++; return 17; } }, |
| "17.0000000000000000000000000000000000000000000000000001"]); |
| assertEq(count, 1); |
| assertEq(arrayConstructed[0], 17); |
| assertEq(arrayConstructed[1], 17); |
| |
| count = 0; |
| var arraySet = new TypedArray(5); |
| arraySet.set({ 0: 17, |
| 1: "17.000000000000000000000000000000000000000000000000000", |
| get 2() { |
| return { valueOf: undefined, |
| toString: function() { count++; return 42; } }; |
| }, |
| get 3() { return true; }, |
| set 3(v) { throw "FAIL"; }, |
| 4: { valueOf: function() { count++; return 127; } }, |
| length: 5 }); |
| assertEq(count, 2); |
| assertEq(arraySet[0], 17); |
| assertEq(arraySet[1], 17); |
| assertEq(arraySet[2], 42); |
| assertEq(arraySet[3], 1); |
| assertEq(arraySet[4], 127); |
| |
| var bigLen = 1e4; |
| var big = new TypedArray(bigLen); |
| function initBig() |
| { |
| for (var i = 0; i < bigLen; i++) |
| big[i] = (i % 2) ? 3 : { valueOf: function() { return 3; } }; |
| } |
| initBig(); |
| for (var i = 0; i < bigLen; i++) |
| { |
| assertEq(big[i], 3, |
| "(" + Object.prototype.toString.call(big) + ")"); |
| } |
| }); |
| |
| /******************************************************************************/ |
| |
| reportCompare(true, true); |
| |
| print("Tests complete"); |