1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/asm.js/testFloatingPoint.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,134 @@ 1.4 +load(libdir + "asm.js"); 1.5 + 1.6 +assertEq(asmLink(asmCompile(USE_ASM + "function f() { return 1.1 } return f"))(), 1.1); 1.7 +assertEq(asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; return +(+(i|0) + .1) } return f"))(1), 1.1); 1.8 +assertEq(asmLink(asmCompile(USE_ASM + "function f(d) { d=+d; return +d } return f"))(1.1), 1.1); 1.9 +assertEq(asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return +(d+e) } return f"))(1.0, .1), 1.1); 1.10 +assertEq(asmLink(asmCompile(USE_ASM + "function f(i,e) { i=i|0;e=+e; return +(+~~i+e) } return f"))(1, .1), 1.1); 1.11 +assertEq(asmLink(asmCompile(USE_ASM + "function f(d,i) { d=+d;i=i|0; return +(d + +(i|0)) } return f"))(.1, 1), 1.1); 1.12 +assertEq(asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return +(d-e) } return f"))(1.1, .8), (1.1-.8)); 1.13 +assertEq(asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return +(d*e) } return f"))(1.1, 2.2), (1.1*2.2)); 1.14 +assertEq(asmLink(asmCompile(USE_ASM + "function g() { var i=2; return (~~(i=(i+1)|0))|0 } return g"))(), 3); 1.15 + 1.16 +var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return (d<e)|0 } return f")); 1.17 +assertEq(f(1.1, 2.2), 1); 1.18 +assertEq(f(1.1, 1.1), 0); 1.19 +assertEq(f(2.1, 1.1), 0); 1.20 + 1.21 +var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return (d<=e)|0 } return f")); 1.22 +assertEq(f(1.1, 2.2), 1); 1.23 +assertEq(f(1.1, 1.1), 1); 1.24 +assertEq(f(2.1, 1.1), 0); 1.25 +assertEq(f(NaN, 1.1), 0); 1.26 +assertEq(f(1.1, NaN), 0); 1.27 +assertEq(f(NaN, NaN), 0); 1.28 + 1.29 +var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return (d>e)|0 } return f")); 1.30 +assertEq(f(2.1, 1.1), 1); 1.31 +assertEq(f(1.1, 1.1), 0); 1.32 +assertEq(f(1.1, 2.1), 0); 1.33 +assertEq(f(NaN, 1.1), 0); 1.34 +assertEq(f(1.1, NaN), 0); 1.35 +assertEq(f(NaN, NaN), 0); 1.36 + 1.37 +var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return (d>=e)|0 } return f")); 1.38 +assertEq(f(2.1, 1.1), 1); 1.39 +assertEq(f(1.0, 1.1), 0); 1.40 +assertEq(f(1.1, 2.1), 0); 1.41 +assertEq(f(NaN, 1.1), 0); 1.42 +assertEq(f(1.1, NaN), 0); 1.43 +assertEq(f(NaN, NaN), 0); 1.44 + 1.45 +var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return (d==e)|0 } return f")); 1.46 +assertEq(f(2.1, 1.1), 0); 1.47 +assertEq(f(1.1, 1.1), 1); 1.48 +assertEq(f(1.1, 2.1), 0); 1.49 +assertEq(f(NaN, 1.1), 0); 1.50 +assertEq(f(1.1, NaN), 0); 1.51 +assertEq(f(NaN, NaN), 0); 1.52 + 1.53 +var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return (d!=e)|0 } return f")); 1.54 +assertEq(f(2.1, 1.1), 1); 1.55 +assertEq(f(1.1, 1.1), 0); 1.56 +assertEq(f(1.1, 2.1), 1); 1.57 +assertEq(f(NaN, 1.1), 1); 1.58 +assertEq(f(1.1, NaN), 1); 1.59 +assertEq(f(NaN, NaN), 1); 1.60 + 1.61 +var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return +(d/e) } return f")); 1.62 +assertEq(f(1.1, .1), (1.1/.1)); 1.63 +assertEq(f(1.1, 0), (1.1/0)); 1.64 +assertEq(f(1.1, -0), (1.1/-0)); 1.65 + 1.66 +var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return +(d%e) } return f")); 1.67 +assertEq(f(1.1, .1), (1.1%.1)); 1.68 +assertEq(f(1.1, 0), (1.1%0)); 1.69 +assertEq(f(1.1, -0), (1.1%-0)); 1.70 + 1.71 +var f = asmLink(asmCompile(USE_ASM + "function f(d) { d=+d; var i = 0; i = ~~d; return i|0 } return f")); 1.72 +assertEq(f(1.0), 1); 1.73 +assertEq(f(1.9), 1); 1.74 +assertEq(f(1.9999), 1); 1.75 +assertEq(f(2.0), 2); 1.76 +assertEq(f(Math.pow(2,40)), ~~Math.pow(2,40)); 1.77 +assertEq(f(-Math.pow(2,40)), ~~-Math.pow(2,40)); 1.78 +assertEq(f(4000000000), ~~4000000000); 1.79 +assertEq(f(-4000000000), ~~-4000000000); 1.80 +assertEq(f(NaN), 0); 1.81 +assertEq(f(Infinity), 0); 1.82 +assertEq(f(-Infinity), 0); 1.83 + 1.84 +assertAsmTypeFail(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return +((i|0)/(j|0)) } return f"); 1.85 +assertAsmTypeFail(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return +(i+j) } return f"); 1.86 +assertAsmTypeFail(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return +(i-j) } return f"); 1.87 + 1.88 +var f = asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return +(((i|0)/(j|0))|0) } return f")); 1.89 +assertEq(f(1,0), 0); 1.90 +assertEq(f(-Math.pow(2,31),-1), -Math.pow(2,31)); 1.91 + 1.92 +var f = asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return +(((i|0)%(j|0))|0) } return f")); 1.93 +assertEq(f(1,0), 0); 1.94 +assertEq(f(-Math.pow(2,31),-1), 0); 1.95 + 1.96 +var {f,g} = asmLink(asmCompile(USE_ASM + "function f() { return 3.5 } function g(d) { d=+d; return +(d+3.5) } return {f:f,g:g}")); 1.97 +assertEq(f(), 3.5); 1.98 +assertEq(g(1), 1+3.5); 1.99 + 1.100 +var buf = new ArrayBuffer(4096); 1.101 +var f64 = new Float64Array(buf); 1.102 +var i32 = new Int32Array(buf); 1.103 +var u32 = new Uint32Array(buf); 1.104 +var f = asmLink(asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f() { return +f64[0] } return f'), this, null, buf); 1.105 +f64[0] = 0; 1.106 +assertEq(f(), 0); 1.107 +f64[0] = -1; 1.108 +assertEq(f(), -1); 1.109 +f64[0] = 1; 1.110 +assertEq(f(), 1); 1.111 +f64[0] = Infinity; 1.112 +assertEq(f(), Infinity); 1.113 +f64[0] = -Infinity; 1.114 +assertEq(f(), -Infinity); 1.115 + 1.116 +function ffi(d) { str = String(d) } 1.117 +var g = asmLink(asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'var ffi=imp.ffi; function g() { ffi(+f64[0]) } return g'), this, {ffi:ffi}, buf); 1.118 +var h = asmLink(asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function g() { return +(+f64[0] < 0.0 ? -+f64[0] : +f64[0]) } return g'), this, null, buf) 1.119 + 1.120 +function ffi1() { return 2.6 } 1.121 +assertEq(asmLink(asmCompile('glob', 'imp', USE_ASM + "var ffi1=imp.ffi1; function g() { var i=0,j=0.0; i=ffi1()|0; j=+ffi1(); return +(+(i|0)+j) } return g"), null, {ffi1:ffi1})(), 2+2.6); 1.122 + 1.123 +// that sounds dangerous! 1.124 +var a = [0,1,0xffff0000,0x7fff0000,0xfff80000,0x7ff80000,0xfffc0000,0x7ffc0000,0xffffffff,0x0000ffff,0x00008fff7]; 1.125 +for (i of a) { 1.126 + for (j of a) { 1.127 + u32[0] = i; 1.128 + u32[1] = j; 1.129 + 1.130 + assertEq(f(), f64[0]); 1.131 + 1.132 + g(); 1.133 + assertEq(str, String(f64[0])); 1.134 + 1.135 + assertEq(h(), Math.abs(f64[0])); 1.136 + } 1.137 +}