Index: tools/compare-table-gen.js |
diff --git a/tools/compare-table-gen.js b/tools/compare-table-gen.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..151be81517d6ad6dbf1c9ce858f5e8f125bc51b7 |
--- /dev/null |
+++ b/tools/compare-table-gen.js |
@@ -0,0 +1,108 @@ |
+// Generates a comparison table test case. |
+// Usage: d8 compare-table-gen.js -- lt|lteq|gt|gteq|eq|ne|eq|sne |
+ |
+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); |
+for (var i = 0; i < strings.length; i++) { |
+ values[i] = eval(strings[i]); |
+} |
+ |
+function test() { |
+ for (var i = 0; i < values.length; i++) { |
+ for (var j = 0; j < values.length; j++) { |
+ var a = values[i]; |
+ var b = values[j]; |
+ var x = expected[i][j]; |
+ assertEquals(x, func(a,b)); |
+ assertEquals(x, left_funcs[i](b)); |
+ assertEquals(x, right_funcs[j](a)); |
+ } |
+ } |
+ |
+ var result = matrix(); |
+ for (var i = 0; i < values.length; i++) { |
+ for (var j = 0; j < values.length; j++) { |
+ assertEquals(expected[i][j], result[i][j]); |
+ } |
+ } |
+} |
+ |
+function gen(name, cmp) { |
+ |
+ 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"); |
+ print("// found in the LICENSE file."); |
+ print(); |
+ print("var values = [" + strings + "];"); |
+ |
+ var body = "(function " + name + "(a,b) { return a " + cmp + " b; })"; |
+ var func = eval(body); |
+ |
+ print("var expected = ["); |
+ |
+ for (var i = 0; i < values.length; i++) { |
+ var line = " ["; |
+ for (var j = 0; j < values.length; j++) { |
+ if (j > 0) line += ","; |
+ line += func(values[i], values[j]) ? "true " : "false"; |
+ } |
+ line += "]"; |
+ if (i < (values.length - 1)) line += ","; |
+ print(line); |
+ } |
+ print("];"); |
+ |
+ print("var func = " + body + ";"); |
+ print("var left_funcs = ["); |
+ |
+ for (var i = 0; i < values.length; i++) { |
+ var value = strings[i]; |
+ var body = "(function " + name + "_L" + i + "(b) { return " + value + " " + cmp + " b; })"; |
+ var end = i < (values.length - 1) ? "," : ""; |
+ print(" " + body + end); |
+ } |
+ print("];"); |
+ |
+ 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 end = i < (values.length - 1) ? "," : ""; |
+ print(" " + body + end); |
+ } |
+ print("];"); |
+ |
+ print("function matrix() {"); |
+ print(" return ["); |
+ for (var i = 0; i < values.length; i++) { |
+ var line = " ["; |
+ for (var j = 0; j < values.length; j++) { |
+ if (j > 0) line += ","; |
+ line += strings[i] + " " + cmp + " " + strings[j]; |
+ } |
+ line += "]"; |
+ if (i < (values.length - 1)) line += ","; |
+ print(line); |
+ } |
+ print(" ];"); |
+ print("}"); |
+ |
+ |
+ 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; |
+} |