|
| 1 | +// <canvas id="drawCanvas" width="1500" height="1500" /> |
| 2 | + |
| 3 | +var cmp_eq = function(v1, v2) { return v1 == v2; }; |
| 4 | +var cmp_lt = function(v1, v2) { return v1 < v2; }; |
| 5 | +var cmp_gt = function(v1, v2) { return v1 > v2; }; |
| 6 | +var cmp_le = function(v1, v2) { return v1 <= v2; }; |
| 7 | +var cmp_ge = function(v1, v2) { return v1 >= v2; }; |
| 8 | +var cmp_ne = function(v1, v2) { return v1 != v2; }; |
| 9 | +var new_date = new Date(); |
| 10 | +var vals = [ |
| 11 | + ["-Infinity", function() { return -Infinity; }], |
| 12 | + ["new Number(-Infinity)",function() { return new Number(-Infinity); }], |
| 13 | + ["[-Infinity]", function() { return [-Infinity]; }], |
| 14 | + ['"-Infinity"', function() { return "-Infinity"; }], |
| 15 | +// ["[-Infinity,0]", function() { return [-Infinity,0]; }], |
| 16 | + ["-1", function() { return -1; }], |
| 17 | + ["new Number(-1)",function() { return new Number(-1); }], |
| 18 | + ["[-1]",function() { return [-1]; }], |
| 19 | + ['"-1"', function() { return "-1"; }], |
| 20 | +// ["[-1,0]", function() { return [-1,0]; }], |
| 21 | + ["-0.5", function() { return -0.5; }], |
| 22 | + ["new Number(-0.5)",function() { return new Number(-0.5); }], |
| 23 | + ["[-0.5]", function() { return [-0.5]; }], |
| 24 | + ['"-0.5"', function() { return "-0.5"; }], |
| 25 | +// ["[-0.5,0]", function() { return [-0.5,0]; }], |
| 26 | + ["[]", function() { return []; }], |
| 27 | + ["[[]]", function() { return [[]]; }], |
| 28 | + ["[null]", function() { return [null]; }], |
| 29 | + ["[undefined]", function() { return [undefined]; }], |
| 30 | + ['[""]', function() { return [""]; }], |
| 31 | + ['""', function() { return ""; }], |
| 32 | +// ["[[],0]", function() { return ["",0]; }], |
| 33 | +// ["[null,0]", function() { return ["",0]; }], |
| 34 | +// ["[undefined,0]", function() { return ["",0]; }], |
| 35 | +// ['["",0]', function() { return ["",0]; }], |
| 36 | + ['new RegExp("")', function() { return new RegExp(""); }], |
| 37 | + ["/.*/", function() { return /.*/; }], |
| 38 | + ["null", function() { return null; }], |
| 39 | + ['new Date(0)', function() { return new Date(0); }], |
| 40 | + ["false", function() { return false; }], |
| 41 | + ["0", function() { return 0; }], |
| 42 | + ["new Number(0)",function() { return new Number(0); }], |
| 43 | + ["[0]", function() { return [0]; }], |
| 44 | + ['"0"', function() { return "0"; }], |
| 45 | +// ["[0,-1]", function() { return [0,-1]; }], |
| 46 | +// ["[0,0]", function() { return [0,0]; }], |
| 47 | +// ['["0",0]', function() { return ["0",0]; }], |
| 48 | +// ["[0,1]", function() { return [0,1]; }], |
| 49 | +// ["[0.5,0]", function() { return [0.5,0]; }], |
| 50 | +// ['["0.5",0]', function() { return ["0.5",0]; }], |
| 51 | + ["0.5", function() { return 0.5; }], |
| 52 | + ["new Number(0.5)",function() { return new Number(0.5); }], |
| 53 | + ["[0.5]", function() { return [0.5]; }], |
| 54 | + ['"0.5"', function() { return "0.5"; }], |
| 55 | + ['new Date(1)', function() { return new Date(1); }], |
| 56 | + ["true", function() { return true; }], |
| 57 | + ["1",function() { return 1; }], |
| 58 | + ["new Number(1)",function() { return new Number(1); }], |
| 59 | + ["[1]", function() { return [1]; }], |
| 60 | + ['"1"', function() { return "1"; }], |
| 61 | +// ["[1,0]", function() { return [1,0]; }], |
| 62 | +// ['["1",0]', function() { return ["1",0]; }], |
| 63 | + ['["A"]', function() { return ["A"]; }], |
| 64 | + ['"A"', function() { return "A"; }], |
| 65 | + ["new Error()", function() { return new Error(); }], |
| 66 | + ['"Error"', function() { return "Error"; }], |
| 67 | + ["Infinity", function() { return Infinity; }], |
| 68 | + ["new Number(Infinity)",function() { return new Number(Infinity); }], |
| 69 | + ["[Infinity]", function() { return [Infinity]; }], |
| 70 | + ['"Infinity"', function() { return "Infinity"; }], |
| 71 | +// ["[Infinity,0]", function() { return [Infinity,0]; }], |
| 72 | + ["[NaN]", function() { return [NaN]; }], |
| 73 | + ['"NaN"', function() { return "NaN"; }], |
| 74 | +// ["[NaN,0]", function() { return [NaN,0]; }], |
| 75 | + ["new ArrayBuffer(0)", function() { return new ArrayBuffer(0); }], |
| 76 | + ['"[object ArrayBuffer]"', function() { return "[object ArrayBuffer]"; }], |
| 77 | + ["{}", function() { return {}; }], |
| 78 | + ["{0:0}", function() { return {0:0}; }], |
| 79 | + ['"[object Object]"', function() { return "[object Object]"; }], |
| 80 | +// ["[{},0]", function() { return [{},0]; }], |
| 81 | + ['"false"', function() { return "false"; }], |
| 82 | +// ["[false,0]", function() { return [false,0]; }], |
| 83 | + ["function(){}", function() { return function(){}; }], |
| 84 | + ['"function (){}"', function() { return "function (){}"; }], |
| 85 | + ['"true"', function() { return "true"; }], |
| 86 | +// ["[true,0]", function() { return [true,0]; }], |
| 87 | + ["undefined", function() { return undefined; }], |
| 88 | + ["NaN", function() { return NaN; }], |
| 89 | +]; |
| 90 | + |
| 91 | +var canvas = document.getElementById("drawCanvas"); |
| 92 | +var ctx = canvas.getContext("2d"); |
| 93 | +var n = vals.length; |
| 94 | +var r = 16; // diameter of grid squares |
| 95 | +var p = 120; // padding space for labels |
| 96 | + |
| 97 | +// color grid cells |
| 98 | +for (var i = 0; i < n; i++) { |
| 99 | + var v1 = vals[i][1](); |
| 100 | + for (var j = 0; j < n; j++) { |
| 101 | + var v2 = vals[j][1](); |
| 102 | + var eq = cmp_eq(v1, v2); |
| 103 | + var lt = cmp_lt(v1, v2); |
| 104 | + var gt = cmp_gt(v1, v2); |
| 105 | + var le = cmp_le(v1, v2); |
| 106 | + var ge = cmp_ge(v1, v2); |
| 107 | + var ne = cmp_ne(v1, v2); |
| 108 | + ctx.fillStyle = |
| 109 | + eq && le && ge && !(lt || gt || ne) ? |
| 110 | + "yellow" : // equals |
| 111 | + lt && le && ne && !(eq || gt || ge) ? |
| 112 | + "orange" : // less than |
| 113 | + gt && ge && ne && !(eq || lt || le) ? |
| 114 | + "silver" : // greater than |
| 115 | + ne && !(eq || lt || gt || le || ge) ? |
| 116 | + "grey" : // non-comparable |
| 117 | + eq && !(lt || gt || le || ge || ne) ? |
| 118 | + "cyan" : // broken equals |
| 119 | + le && ge && ne && !(eq || lt || gt) ? |
| 120 | + "green" : // broken non-comp |
| 121 | + "white"; |
| 122 | + ctx.fillRect(p+i*r,p+j*r,r,r); |
| 123 | + } |
| 124 | +} |
| 125 | + |
| 126 | +// draw labels |
| 127 | +ctx.fillStyle = "black"; |
| 128 | +var f = 12; |
| 129 | +ctx.font = f + "px Helvetica"; |
| 130 | +for (var i = 0; i < n; i++) { |
| 131 | + var s = vals[i][0]; |
| 132 | + var w = ctx.measureText(s).width; |
| 133 | + ctx.save(); |
| 134 | + ctx.translate(p+i*r+r/2-f*0.4,p-w-2); |
| 135 | + ctx.rotate(3.14159/2); |
| 136 | + ctx.fillText(s, 0, 0); |
| 137 | + ctx.restore(); |
| 138 | +} |
| 139 | +for (var i = 0; i < n; i++) { |
| 140 | + var s = vals[i][0]; |
| 141 | + var w = ctx.measureText(s).width; |
| 142 | + ctx.fillText(s, p-w-2, p+i*r+r/2+f*0.4); |
| 143 | +} |
| 144 | + |
| 145 | +// draw grid lines |
| 146 | +ctx.beginPath(); |
| 147 | +ctx.strokeStyle = "black"; |
| 148 | +for (var i = 0; i <= n; i++) { |
| 149 | + ctx.moveTo(p+r*i, p); |
| 150 | + ctx.lineTo(p+r*i, p+r*n); |
| 151 | + ctx.moveTo(p, p+r*i); |
| 152 | + ctx.lineTo(p+r*n, p+r*i); |
| 153 | +} |
| 154 | +ctx.stroke(); |
0 commit comments