| 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;
|
| +}
|
|
|