Decimal Logic Test
to support an stackoverflow answer
by juve
JavaScript
var getFadeInClass = function(t1,t2,t3) {
// for the sake of shortness I use ".b" instead of ".b_class" etc.
var num = t1*100 + t2*10 + t3
switch(num){
case 100:; case 200:; case 300: return ".b"
case 10:; case 20:; case 30: return ".c"
case 1: return ".d"
case 110:; case 120:; case 130:;
case 210:; case 220:; case 230:;
case 310:; case 320:; case 330: return ".b.c"
case 101:; case 102:; case 103:;
case 201:; case 202:; case 203:;
case 301:; case 302:; case 303: return ".b.d"
}
return ""
}
var simpleRules = function(t1,t2,t3) {
var s = "";
if (t1) {
s += '.b';
}
if (t2) {
s += '.c';
}
if (t3 && !(t1 || t2)) {
s += '.d';
}
return s
}
var orignalRules = function(t1,t2,t3) {
if (t1 >= 1 && t2 == 0 && t3 == 0) return ".b"
else if (t1 == 0 && t2 >= 1 && t3 == 0) return ".c"
else if (t1 == 0 && t2 == 0 && t3 == 1) return ".d"
else if (t1 && t2 >= 1 && t3 == 0) return ".b.c"
else if (t1 && t3 >= 1&& t2 == 0) return ".b.d"
return ""
}
var getRand = function () {
var r = Math.random()
if (r < 0.25) return 0
else if (r < 0.5 ) return 1
else if (r < 0.75) return 2
else return 3
}
var test = function () {
var i = 0;
var t1,t2,t3;
var expected, actual, simple;
document.write("<pre>")
while(i++ < 1000) {
t1 = getRand(), t2 = getRand(), t3 = getRand()
expected = orignalRules(t1,t2,t3)
actual = getFadeInClass(t1,t2,t3)
simple = simpleRules(t1,t2,t3)
if (expected != actual) {
document.write( t1,t2,t3, ": ( '", expected, "' != '", actual, "' )\n" )
document.write("DecimalRuleFailed\n")
break
}
else if( actual || expected ) {
document.write("dec: " + expected + "==" + actual + "\n" )
}
...