doubleComparisons.js (2288B)
1 function gen_f(x) { 2 var f = "{\n" + 3 " var x = " + x + ";\n" + 4 " if (x)\n" + 5 " return true;\n" + 6 " return false;\n" + 7 "}"; 8 return new Function(f); 9 } 10 11 function run_f(x) { 12 return gen_f(x)(); 13 } 14 15 function gen_k(x, op, y) { 16 var f = "{\n" + 17 " var x = " + x + ";\n" + 18 " var y = " + y + ";\n" + 19 " if (x " + op + " y)\n" + 20 " return true;\n" + 21 " return false;\n" + 22 "}"; 23 return new Function(f); 24 } 25 26 function run_k(x, op, y) { 27 return gen_k(x, op, y)(); 28 } 29 30 function gen_r(x, op, y) { 31 var f = "{\n" + 32 " var x = " + x + ";\n" + 33 " var y = " + y + ";\n" + 34 " return x " + op + " y;\n" + 35 "}"; 36 return new Function(f); 37 } 38 39 function run_r(x, op, y) { 40 return gen_r(x, op, y)(); 41 } 42 43 assertEq(run_f("1 / 0"), true); 44 assertEq(run_f("0 / 0"), false); 45 assertEq(run_f("-0"), false); 46 assertEq(run_f(1.3), true); 47 48 // Ordered results. 49 assertEq(run_k(1.3, ">", 2.3), false); 50 assertEq(run_k(2.3, ">", 2.3), false); 51 assertEq(run_k(2.4, ">", 2.3), true); 52 assertEq(run_k(1.3, ">=", 2.3), false); 53 assertEq(run_k(2.3, ">=", 2.3), true); 54 assertEq(run_k(2.4, ">=", 2.3), true); 55 assertEq(run_k(1.3, "<", 2.3), true); 56 assertEq(run_k(2.3, "<", 2.3), false); 57 assertEq(run_k(2.4, "<", 2.3), false); 58 assertEq(run_k(1.3, "<", 2.3), true); 59 assertEq(run_k(2.3, "<=", 2.3), true); 60 assertEq(run_k(2.4, "<", 2.3), false); 61 62 // Unordered results. 63 assertEq(run_k("NaN", "<", 2.5), false); 64 assertEq(run_k("NaN", "<=", 2.5), false); 65 assertEq(run_k("NaN", ">", 2.5), false); 66 assertEq(run_k("NaN", ">=", 2.5), false); 67 68 // Ordered results. 69 assertEq(run_r(1.3, ">", 2.3), false); 70 assertEq(run_r(2.3, ">", 2.3), false); 71 assertEq(run_r(2.4, ">", 2.3), true); 72 assertEq(run_r(1.3, ">=", 2.3), false); 73 assertEq(run_r(2.3, ">=", 2.3), true); 74 assertEq(run_r(2.4, ">=", 2.3), true); 75 assertEq(run_r(1.3, "<", 2.3), true); 76 assertEq(run_r(2.3, "<", 2.3), false); 77 assertEq(run_r(2.4, "<", 2.3), false); 78 assertEq(run_r(1.3, "<", 2.3), true); 79 assertEq(run_r(2.3, "<=", 2.3), true); 80 assertEq(run_r(2.4, "<", 2.3), false); 81 82 // Unordered results. 83 assertEq(run_r("NaN", "<", 2.5), false); 84 assertEq(run_r("NaN", "<=", 2.5), false); 85 assertEq(run_r("NaN", ">", 2.5), false); 86 assertEq(run_r("NaN", ">=", 2.5), false);