Index: tools/compare-table-gen.js |
diff --git a/tools/compare-table-gen.js b/tools/compare-table-gen.js |
index 151be81517d6ad6dbf1c9ce858f5e8f125bc51b7..e0c870daa578a302567ce9e7342bb88f92439d30 100644 |
--- a/tools/compare-table-gen.js |
+++ b/tools/compare-table-gen.js |
@@ -1,5 +1,9 @@ |
+// Copyright 2015 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
// Generates a comparison table test case. |
-// Usage: d8 compare-table-gen.js -- lt|lteq|gt|gteq|eq|ne|eq|sne |
+// Usage: d8 compare-table-gen.js -- lt|lteq|gt|gteq|eq|ne|eq|sne|min|max |
var strings = ["true", "false", "null", "void 0", "0", "0.0", "-0", "\"\"", "-1", "-1.25", "1", "1.25", "-2147483648", "2147483648", "Infinity", "-Infinity", "NaN"]; |
var values = new Array(strings.length); |
@@ -27,7 +31,16 @@ function test() { |
} |
} |
-function gen(name, cmp) { |
+function expr(infix, a, cmp, b) { |
+ return infix ? a + " " + cmp + " " + b : cmp + "(" + a + ", " + b + ")"; |
+} |
+ |
+function SpecialToString(x) { |
+ if ((1 / x) == -Infinity) return "-0"; |
+ return "" + x; |
+} |
+ |
+function gen(name, cmp, infix) { |
print("// Copyright 2015 the V8 project authors. All rights reserved."); |
print("// Use of this source code is governed by a BSD-style license that can be"); |
@@ -35,7 +48,7 @@ function gen(name, cmp) { |
print(); |
print("var values = [" + strings + "];"); |
- var body = "(function " + name + "(a,b) { return a " + cmp + " b; })"; |
+ var body = "(function " + name + "(a,b) { return " + expr(infix, "a", cmp, "b") + "; })"; |
var func = eval(body); |
print("var expected = ["); |
@@ -44,7 +57,7 @@ function gen(name, cmp) { |
var line = " ["; |
for (var j = 0; j < values.length; j++) { |
if (j > 0) line += ","; |
- line += func(values[i], values[j]) ? "true " : "false"; |
+ line += SpecialToString(func(values[i], values[j])); |
} |
line += "]"; |
if (i < (values.length - 1)) line += ","; |
@@ -57,7 +70,7 @@ function gen(name, cmp) { |
for (var i = 0; i < values.length; i++) { |
var value = strings[i]; |
- var body = "(function " + name + "_L" + i + "(b) { return " + value + " " + cmp + " b; })"; |
+ var body = "(function " + name + "_L" + i + "(b) { return " + expr(infix, value, cmp, "b") + "; })"; |
var end = i < (values.length - 1) ? "," : ""; |
print(" " + body + end); |
} |
@@ -66,7 +79,7 @@ function gen(name, cmp) { |
print("var right_funcs = ["); |
for (var i = 0; i < values.length; i++) { |
var value = strings[i]; |
- var body = "(function " + name + "_R" + i + "(a) { return a " + cmp + " " + value + "; })"; |
+ var body = "(function " + name + "_R" + i + "(a) { return " + expr(infix, "a", cmp, value) + "; })"; |
var end = i < (values.length - 1) ? "," : ""; |
print(" " + body + end); |
} |
@@ -78,7 +91,7 @@ function gen(name, cmp) { |
var line = " ["; |
for (var j = 0; j < values.length; j++) { |
if (j > 0) line += ","; |
- line += strings[i] + " " + cmp + " " + strings[j]; |
+ line += expr(infix, strings[i], cmp, strings[j]); |
} |
line += "]"; |
if (i < (values.length - 1)) line += ","; |
@@ -91,18 +104,17 @@ function gen(name, cmp) { |
print(test.toString()); |
print("test();"); |
print("test();"); |
- |
- print(); |
- print(); |
} |
switch (arguments[0]) { |
- case "lt": gen("lt", "<"); break; |
- case "lteq": gen("lteq", "<="); break; |
- case "gt": gen("gt", ">"); break; |
- case "gteq": gen("gteq", ">="); break; |
- case "eq": gen("eq", "=="); break; |
- case "ne": gen("ne", "!="); break; |
- case "seq": gen("seq", "==="); break; |
- case "sne": gen("sne", "!=="); break; |
+ case "lt": gen("lt", "<", true); break; |
+ case "lteq": gen("lteq", "<=", true); break; |
+ case "gt": gen("gt", ">", true); break; |
+ case "gteq": gen("gteq", ">=", true); break; |
+ case "eq": gen("eq", "==", true); break; |
+ case "ne": gen("ne", "!=", true); break; |
+ case "seq": gen("seq", "===", true); break; |
+ case "sne": gen("sne", "!==", true); break; |
+ case "min": gen("min", "Math.min", false); break; |
+ case "max": gen("max", "Math.max", false); break; |
} |