Chromium Code Reviews| Index: test/mjsunit/strong/implicit-conversions.js |
| diff --git a/test/mjsunit/strong/implicit-conversions.js b/test/mjsunit/strong/implicit-conversions.js |
| index dd22db152eb3aae91133383cf0cdfb4dd106f787..f5870770ff02a1bef180e5cdb49a27a1038b13fc 100644 |
| --- a/test/mjsunit/strong/implicit-conversions.js |
| +++ b/test/mjsunit/strong/implicit-conversions.js |
| @@ -7,69 +7,114 @@ |
| 'use strict'; |
| // TODO(conradw): Implement other strong operators |
| -let strong_arith = [ |
| - "-", |
| - "*", |
| - "/", |
| - "%" |
| -] |
| - |
| -let nonnumber_values = [ |
| - "{}", |
| - "'foo'", |
| - "(function(){})", |
| - "[]", |
| - "'0'", |
| - "'NaN'", |
| - "(class Foo {})" |
| -] |
| - |
| -let number_values = [ |
| - "0", |
| - "(-0)", |
| - "1", |
| - "0.79", |
| - "(-0.79)", |
| - "4294967295", |
| - "4294967296", |
| - "(-4294967295)", |
| - "(-4294967296)", |
| - "9999999999999", |
| - "(-9999999999999)", |
| - "1.5e10", |
| - "(-1.5e10)", |
| - "0xFFF", |
| - "(-0xFFF)", |
| - "NaN", |
| - "Infinity", |
| - "(-Infinity)" |
| -] |
| +let strong_binops = [ |
|
arv (Not doing code reviews)
2015/04/24 15:39:42
FYI. Our js style does not allow underscores in va
conradw
2015/04/27 11:20:47
Hah! I should at least try and be consistent, sinc
|
| + "-", |
| + "*", |
| + "/", |
| + "%", |
| + "|", |
| + "&", |
| + "^", |
| + "<<", |
| + ">>", |
| + ">>>", |
| +]; |
| + |
| +let strong_unops = [ |
| + "~" |
| +]; |
| + |
| +let nonNumberValues = [ |
| + "{}", |
| + "'foo'", |
| + "(function(){})", |
| + "[]", |
| + "'0'", |
| + "'NaN'", |
| + "(class Foo {})" |
| +]; |
| + |
| +let numberValues = [ |
| + "0", |
| + "(-0)", |
| + "1", |
| + "0.79", |
| + "(-0.79)", |
| + "4294967295", |
| + "4294967296", |
| + "(-4294967295)", |
| + "(-4294967296)", |
| + "9999999999999", |
| + "(-9999999999999)", |
| + "1.5e10", |
| + "(-1.5e10)", |
| + "0xFFF", |
| + "(-0xFFF)", |
| + "NaN", |
| + "Infinity", |
| + "(-Infinity)" |
| +]; |
| function sub_strong(x, y) { |
| "use strong"; |
| - let v = x - y; |
| - return v; |
| + return x - y; |
| } |
| function mul_strong(x, y) { |
| "use strong"; |
| - let v = x * y; |
| - return v; |
| + return x * y; |
| } |
| function div_strong(x, y) { |
| "use strong"; |
| - let v = x / y; |
| - return v; |
| + return x / y; |
| } |
| function mod_strong(x, y) { |
| "use strong"; |
| - let v = x % y; |
| - return v; |
| + return x % y; |
| +} |
| + |
| +function or_strong(x, y) { |
| + "use strong"; |
| + return x | y; |
| +} |
| + |
| +function and_strong(x, y) { |
| + "use strong"; |
| + return x & y; |
| +} |
| + |
| +function xor_strong(x, y) { |
| + "use strong"; |
| + return x ^ y; |
| +} |
| + |
| +function shl_strong(x, y) { |
| + "use strong"; |
| + return x << y; |
| +} |
| + |
| +function shr_strong(x, y) { |
| + "use strong"; |
| + return x >> y; |
| } |
| -let strong_funcs = [sub_strong, mul_strong, div_strong, mod_strong]; |
| +function sar_strong(x, y) { |
| + "use strong"; |
| + return x >>> y; |
| +} |
| + |
| +function not_strong(x, y) { |
|
arv (Not doing code reviews)
2015/04/24 15:39:42
Not clear why you need this function. You are test
conradw
2015/04/27 11:20:47
Yeah, it was a mistake to put this here.
|
| + "use strong"; |
| + let v1 = ~x; |
| + let v2 = ~y; |
| + return v1 | v2; |
| +} |
| + |
| +let strong_funcs = [sub_strong, mul_strong, div_strong, mod_strong, or_strong, |
| + and_strong, xor_strong, shl_strong, shr_strong, sar_strong, |
| + not_strong]; |
| function inline_sub_strong(x, y) { |
| "use strong"; |
| @@ -91,17 +136,17 @@ function inline_outer_strong(x, y) { |
| return inline_sub(x, y); |
| } |
| -for (let op of strong_arith) { |
| - for (let left of number_values) { |
| - for (let right of number_values) { |
| +for (let op of strong_binops) { |
| + for (let left of numberValues) { |
| + for (let right of numberValues) { |
| let expr = "(" + left + op + right + ")"; |
| assertEquals(eval(expr), eval("'use strong';" + expr)); |
| assertDoesNotThrow("'use strong'; " + expr + ";"); |
| assertDoesNotThrow("'use strong'; let v = " + expr + ";"); |
| } |
| } |
| - for (let left of number_values) { |
| - for (let right of nonnumber_values) { |
| + for (let left of numberValues) { |
| + for (let right of nonNumberValues) { |
| let expr = "(" + left + op + right + ")"; |
| assertDoesNotThrow("'use strict'; " + expr + ";"); |
| assertDoesNotThrow("'use strict'; let v = " + expr + ";"); |
| @@ -109,8 +154,8 @@ for (let op of strong_arith) { |
| assertThrows("'use strong'; let v = " + expr + ";", TypeError); |
| } |
| } |
| - for (let left of nonnumber_values) { |
| - for (let right of number_values.concat(nonnumber_values)) { |
| + for (let left of nonNumberValues) { |
| + for (let right of numberValues.concat(nonNumberValues)) { |
| let expr = "(" + left + op + right + ")"; |
| assertDoesNotThrow("'use strict'; " + expr + ";"); |
| assertDoesNotThrow("'use strict'; let v = " + expr + ";"); |
| @@ -120,6 +165,22 @@ for (let op of strong_arith) { |
| } |
| } |
| +for (let op of strong_unops) { |
| + for (let value of numberValues) { |
| + let expr = "(" + op + value + ")"; |
| + assertEquals(eval(expr), eval("'use strong';" + expr)); |
| + assertDoesNotThrow("'use strong'; " + expr + ";"); |
| + assertDoesNotThrow("'use strong'; let v = " + expr + ";"); |
| + } |
| + for (let value of nonNumberValues) { |
| + let expr = "(" + op + value + ")"; |
| + assertDoesNotThrow("'use strict'; " + expr + ";"); |
| + assertDoesNotThrow("'use strict'; let v = " + expr + ";"); |
| + assertThrows("'use strong'; " + expr + ";", TypeError); |
| + assertThrows("'use strong'; let v = " + expr + ";", TypeError); |
| + } |
| +} |
| + |
| for (let func of strong_funcs) { |
| let a = func(4, 5); |
| let b = func(4, 5); |
| @@ -143,8 +204,8 @@ for (let func of strong_funcs) { |
| %OptimizeFunctionOnNextCall(func); |
| let c = func(2, "foo"); |
| assertUnreachable(); |
| - } catch(e) { |
| - assertTrue(e instanceof TypeError); |
| + } catch (e) { |
| + assertInstanceof(e, TypeError); |
| assertUnoptimized(func); |
| assertThrows(function(){func(2, "foo");}, TypeError); |
| assertDoesNotThrow(function(){func(2, 3);}); |