// 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