Skip to content

Commit de91a92

Browse files
authored
Create truth-table-extended.js
1 parent b16489e commit de91a92

File tree

1 file changed

+154
-0
lines changed

1 file changed

+154
-0
lines changed

truth-table-extended.js

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
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

Comments
 (0)