Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Unified Diff: test/mjsunit/strong/implicit-conversions.js

Issue 1216463003: [strong] Implement strong mode semantics for the count operation. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: cl feedback + eliminate runtime check Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/x87/full-codegen-x87.cc ('k') | test/mjsunit/strong/implicit-conversions-constants.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/strong/implicit-conversions.js
diff --git a/test/mjsunit/strong/implicit-conversions.js b/test/mjsunit/strong/implicit-conversions.js
index c4a6765f8a1c337b831daf23a0de98a73a0f7072..cd8acf70857bf31050a07ff5d5fd24615c449d57 100644
--- a/test/mjsunit/strong/implicit-conversions.js
+++ b/test/mjsunit/strong/implicit-conversions.js
@@ -61,23 +61,17 @@ let numberValues = [
"0",
"(-0)",
"1",
- "0.79",
- "(-0.79)",
- "4294967295",
- "4294967296",
"(-4294967295)",
"(-4294967296)",
"9999999999999",
"(-9999999999999)",
- "1.5e10",
- "(-1.5e10)",
- "0xFFF",
- "(-0xFFF)",
"NaN",
"Infinity",
"(-Infinity)"
];
+//******************************************************************************
+// Relational comparison function declarations
function add_strong(x, y) {
"use strong";
return x + y;
@@ -253,6 +247,18 @@ function typed_greater_equal_strong(x, y) {
return (+x) >= (+y);
}
+//******************************************************************************
+// (in)equality function declarations
+function str_equal_strong(x, y) {
+ "use strong";
+ return x === y;
+}
+
+function str_ineq_strong(x, y) {
+ "use strong";
+ return x !== y;
+}
+
let strongNumberFuncs = [add_num_strong, sub_strong, mul_strong, div_strong,
mod_strong, or_strong, and_strong, xor_strong,
shl_strong, shr_strong, sar_strong, less_num_strong,
@@ -332,44 +338,75 @@ for (let op of strongUnops) {
for (let func of strongNumberFuncs) {
// Check IC None*None->None throws
- assertThrows(function(){func(2, "foo");}, TypeError);
- %OptimizeFunctionOnNextCall(func);
- assertThrows(function(){func(2, "foo");}, TypeError);
- %DeoptimizeFunction(func);
+ for (let v of nonNumberValues) {
+ let value = eval(v);
+ assertThrows(function(){func(2, value);}, TypeError);
+ %OptimizeFunctionOnNextCall(func);
+ assertThrows(function(){func(2, value);}, TypeError);
+ %DeoptimizeFunction(func);
+ }
func(4, 5);
func(4, 5);
// Check IC Smi*Smi->Smi throws
- assertThrows(function(){func(2, "foo");}, TypeError);
- %OptimizeFunctionOnNextCall(func);
- assertThrows(function(){func(2, "foo");}, TypeError);
- %DeoptimizeFunction(func);
+ for (let v of nonNumberValues) {
+ let value = eval(v);
+ assertThrows(function(){func(2, value);}, TypeError);
+ %OptimizeFunctionOnNextCall(func);
+ assertThrows(function(){func(2, value);}, TypeError);
+ %DeoptimizeFunction(func);
+ }
func(NaN, NaN);
func(NaN, NaN);
// Check IC Number*Number->Number throws
- assertThrows(function(){func(2, "foo");}, TypeError);
- %OptimizeFunctionOnNextCall(func);
- assertThrows(function(){func(2, "foo");}, TypeError);
- %DeoptimizeFunction(func);
+ for (let v of nonNumberValues) {
+ let value = eval(v);
+ assertThrows(function(){func(2, value);}, TypeError);
+ %OptimizeFunctionOnNextCall(func);
+ assertThrows(function(){func(2, value);}, TypeError);
+ %DeoptimizeFunction(func);
+ }
}
for (let func of strongStringOrNumberFuncs) {
// Check IC None*None->None throws
- assertThrows(function(){func(2, "foo");}, TypeError);
- %OptimizeFunctionOnNextCall(func);
- assertThrows(function(){func(2, "foo");}, TypeError);
- %DeoptimizeFunction(func);
+ for (let v of nonNumberValues) {
+ let value = eval(v);
+ assertThrows(function(){func(2, value);}, TypeError);
+ %OptimizeFunctionOnNextCall(func);
+ assertThrows(function(){func(2, value);}, TypeError);
+ %DeoptimizeFunction(func);
+ }
func("foo", "bar");
func("foo", "bar");
// Check IC String*String->String throws
- assertThrows(function(){func(2, "foo");}, TypeError);
- %OptimizeFunctionOnNextCall(func);
- assertThrows(function(){func(2, "foo");}, TypeError);
- %DeoptimizeFunction(func);
+ for (let v of nonNumberValues) {
+ let value = eval(v);
+ assertThrows(function(){func(2, value);}, TypeError);
+ %OptimizeFunctionOnNextCall(func);
+ assertThrows(function(){func(2, value);}, TypeError);
+ %DeoptimizeFunction(func);
+ }
func(NaN, NaN);
func(NaN, NaN);
// Check IC Generic*Generic->Generic throws
- assertThrows(function(){func(2, "foo");}, TypeError);
+ for (let v of nonNumberValues) {
+ let value = eval(v);
+ assertThrows(function(){func(2, value);}, TypeError);
+ %OptimizeFunctionOnNextCall(func);
+ assertThrows(function(){func(2, value);}, TypeError);
+ %DeoptimizeFunction(func);
+ }
+}
+
+for (let func of [str_equal_strong, str_ineq_strong]) {
+ assertDoesNotThrow(function(){func(2, undefined)});
+ assertDoesNotThrow(function(){func(2, undefined)});
+ %OptimizeFunctionOnNextCall(func);
+ assertDoesNotThrow(function(){func(2, undefined)});
+ %DeoptimizeFunction(func);
+ assertDoesNotThrow(function(){func(true, {})});
+ assertDoesNotThrow(function(){func(true, {})});
%OptimizeFunctionOnNextCall(func);
- assertThrows(function(){func(2, "foo");}, TypeError);
+ assertDoesNotThrow(function(){func(true, {})});
%DeoptimizeFunction(func);
}
« no previous file with comments | « src/x87/full-codegen-x87.cc ('k') | test/mjsunit/strong/implicit-conversions-constants.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698