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

class foo {}
class bar extends foo {}
class baz extends bar {}

// Method

class MethodTest {
    UNKNOWN foo() {} // 1/5 failure of clause 1 (incorrectly typed return type)
        
    Null bar(Int a, Null b, UNKNOWN c) {} // 2/5 failure of clause 1 (incorrectly typed arguments)

    MethodTest classReturnTest() { // success of clause 2 (containing class as return type)
        return this
    }
    
    bar overrideTest(bar a, bar b) { return new bar() } // success of clause 3
    
    foo overrideTest(bar a, bar b) { // 3/5 failure of clauses 3 and 4 (return type not subtype of bar)
        return new bar()
    } 
    
    bar overrideTest(baz a, bar b) { // 4/5 failure of clauses 3 and 4 (parameter type not supertype of bar)
        return new bar()
    }

    baz overrideTest(foo a, foo b) { // successful override
        return new baz() // success (polymorphism)
    }

    Null varScopeTest(Int a, foo f) {
        Int b = a; // success of clause 6 (parameter in variable scope)
        foo g = f; // success of clause 6 (parameter in variable scope)
        MethodTest m = this; // success of clause 6 (this in variable scope)
    }

    bar returnExpressionTypeTest() { return new foo() } // 5/5 failure of clause 7 (expression type not subtype of declared return type)

    bar returnExpressionTypeTest2() { return new baz() } // success of clause 7

}

0