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" )
        }
     ...