| "use strict"; |
| |
| function assert(b) { |
| if (!b) |
| throw new Error; |
| } |
| |
| |
| function test1() { |
| function foo(dv) { |
| return [dv.getFloat32(0), dv.getFloat64(0)]; |
| } |
| noInline(foo); |
| |
| let ab = new ArrayBuffer(8); |
| let dv = new DataView(ab); |
| dv.setFloat64(0, 128431.42342189432, false); |
| for (let i = 0; i < 10000; ++i) { |
| let result = foo(dv); |
| assert(result[0] !== result[1]); |
| } |
| } |
| test1(); |
| |
| function test2() { |
| function foo(dv) { |
| return [dv.getFloat32(0), dv.getFloat32(0)]; |
| } |
| noInline(foo); |
| |
| let ab = new ArrayBuffer(8); |
| let dv = new DataView(ab); |
| dv.setFloat64(0, 128431.42342189432, false); |
| for (let i = 0; i < 10000; ++i) { |
| let result = foo(dv); |
| assert(result[0] === result[1]); |
| } |
| } |
| test2(); |
| |
| function test3() { |
| function foo(dv, ta) { |
| let a = dv.getFloat64(0, true); |
| ta[0] = Math.PI; |
| let b = dv.getFloat64(0, true); |
| return [a, b]; |
| } |
| noInline(foo); |
| |
| let ab = new ArrayBuffer(8); |
| let dv = new DataView(ab); |
| let ta = new Float64Array(ab); |
| for (let i = 0; i < 40000; ++i) { |
| dv.setFloat64(0, 0.0, true); |
| let result = foo(dv, ta); |
| assert(result[0] === 0.0); |
| assert(result[1] === Math.PI); |
| } |
| } |
| test3(); |
| |
| function test4() { |
| function foo(dv) { |
| let a = dv.getInt32(0, true); |
| let b = dv.getInt32(0, false); |
| return [a, b]; |
| } |
| noInline(foo); |
| |
| let ab = new ArrayBuffer(8); |
| let dv = new DataView(ab); |
| dv.setInt32(0, 0x11223344, true); |
| for (let i = 0; i < 40000; ++i) { |
| let result = foo(dv); |
| assert(result[0] === 0x11223344); |
| assert(result[1] === 0x44332211) |
| } |
| } |
| test4(); |
| |
| function test5() { |
| function foo(dv, littleEndian) { |
| let a = dv.getInt32(0, littleEndian); |
| let b = dv.getInt32(0, !littleEndian); |
| return [a, b]; |
| } |
| noInline(foo); |
| |
| let ab = new ArrayBuffer(8); |
| let dv = new DataView(ab); |
| dv.setInt32(0, 0x11223344, true); |
| for (let i = 0; i < 40000; ++i) { |
| let result = foo(dv, true); |
| assert(result[0] === 0x11223344); |
| assert(result[1] === 0x44332211) |
| } |
| } |
| test5(); |
| |
| function test6() { |
| function foo(dv, littleEndian) { |
| let a = dv.getInt32(0, littleEndian); |
| let b = dv.getInt32(0, littleEndian); |
| return [a, b]; |
| } |
| noInline(foo); |
| |
| let ab = new ArrayBuffer(8); |
| let dv = new DataView(ab); |
| dv.setInt32(0, 0x11223344, true); |
| for (let i = 0; i < 40000; ++i) { |
| let result = foo(dv, true); |
| assert(result[0] === 0x11223344); |
| assert(result[1] === 0x11223344) |
| } |
| } |
| test6(); |
| |
| function test7() { |
| function foo(dv) { |
| let a = dv.getInt32(0, true); |
| let b = dv.getInt32(4, true); |
| return [a, b]; |
| } |
| noInline(foo); |
| |
| let ab = new ArrayBuffer(8); |
| let dv = new DataView(ab); |
| dv.setInt32(0, 0x11223344, true); |
| dv.setInt32(4, 0x12121212, true); |
| for (let i = 0; i < 40000; ++i) { |
| let result = foo(dv, true); |
| assert(result[0] === 0x11223344); |
| assert(result[1] === 0x12121212); |
| } |
| } |
| test7(); |