Newer
Older
zweic / tests / 4 / term00.zwei
@ajaggi ajaggi on 26 Dec 2005 3 KB Added some test cases
// zweic - test program for term typing checks
// M. Ganguin, J. Ruffin 2005

// Ident 
class foo {
    Int y;
    Null bar() {
        Int x = 0;
        y; // 1/1 failure of clause 1
        x; // success
    }
}

// Select
class bar {
    Int h;
    Null foo() {
       foo f = new foo(1);
       k.h; // 1/2 failure of clauses 1 and 2 (nonexistent ident)
       bar h = new bar(1); // success of recursive class definition
       f.x; // 2/2 failure of clause 3
       f.y; // success
    }
}

// Call
class bof extends bar {
}
class baz {
    Int x;
    Null works(Int a, bar c) {}
    Null foo() {
        bof b = new bof(1);
        foo h = new foo(1);
        baz z = new baz(1);
        k.foo(); // 1/4 failure of clauses 1 and 2 (nonexistent ident)
        h.gneuh(); // 2/4 failure of clause 3 (nonexistent method)
        z.works(1); // 3/4 failure of clause 3 (wrong number of arguments)
        z.works(1, h); // 4/4 failure of clause 4 (parameter not subtype of bof)
        z.works(2, b); // success
    }
}

// New
class testnew {
    Int x;
    Null foo() {
        new unknown(); // 1/3 failure of clause 1 (nonexistent class)
        bar b = new bar(); // 2/3 failure of clauses 2 and 3 (wrong number of arguments)
        bar c = new bar(bof); // 3/3 failure of clauses 2 and 3 (argument not subtype of Int)
        foo f = new foo(1); // success
    }
}

// IntLit : untestable
// NullLit : untestable

// UnOp
class UnOpTest {
    Null foo() {
        Int x = 2;
        Null z = null;
        -y; // 1/2 failure of clause 1 (nonexistent ident)
        -z; // 2/2 failure of clause 1 (ident not of type Int)
        -x; // success
        !x; // success
    }
}

// Binop 
class BinOpTest {
    Null foo() {
        Int x1 = 2;
        Int x2 = 3;
        Null z = null;
        k + x2; // 1/4 failure of clause 1 (nonexistent ident)
        x1 + l; // 2/4 failure of clause 2 (nonexistent ident)
        z + x2; // 3/4 failure of clause 1 (type of ident not Int)
        x1 + z; // 4/4 failure of clause 2 (type of ident not Int)
        x1 + x2; // success
    }
}
        
// ObjComp
class ObjCompTest {
    Null foo() {
        bar b = new bar(1);
        bof z = new bof(1);
        foo f = new foo(2);
        f + b; // 1/5 failure of clause 1 (binop not == or !=)
        k == b; // 2/5 failure of clause 2 (nonexistent ident)
        b == l; // 3/5 failure of clause 2 (nonexistent ident)
        f == b; // 4/5 failure of clause 3 (subtype mismatch)
        b == f; // 5/5 failure of clause 3 (subtype mismatch)
        z == b; // success
    }
}

// ReadInt : untestable
// ReadChar : untestable

// If
class IfTest {
    Null foo() {
        Int t = 0;
        Null n = null;

        bar b = new bar(2);
        bof z = new bof(3);
        
        if(k) {} else {}; // 1/7 failure of clause 1 (nonexistent condition)
        if(n) {} else {}; // 2/7 failure of clause 1 (condition not Int)
        if(t) {gorh g = null;return g} else 2; // 3/7 failure of clause 2 (unknown type)
        if(t) 2 else {gorh g = null;return g }; // 4/7 failure of clause 2 (unknown type)
        if(t) {foo f = new foo(1);return f} else 2;  // 5/7 failure of clause 3 (LUB not found)
        if(t) 2 else {foo f = new foo(2);return f};  // 6/7 failure of clause 3 (LUB not found)
        bof y = if (t) b else z; // 7/7 failure of clause 3 (return type mismatch)
        if(t) 2 else 3; // success
        if(t) b else z; // success
    }
}

// Block

class BlockTest {
    Null foo() {
        {
            Int x = null; // 1/2 failure of clause 1 (incorrectly typed statement in block)
            return x
        };
        {
            Int x = 2;
            return y // 2/2 failure of clause 2 (expression not in block scope)
        };
        {
            Int x = 2;
            return x // success
        };
    }
}

0