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

Unified Diff: tools/compare-table-gen.js

Issue 1069673002: Add more systematic tests for comparisons. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 8 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 | « test/mjsunit/compare-table-sne.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
+}
« no previous file with comments | « test/mjsunit/compare-table-sne.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698