// Test type decoration enforcement using namespace oadl; var g : Float; class foo { public var s : String; } foo bar {} proc fact(i : Int) { if( i < 2 ) return 1; return i * fact(i - 1); } proc main() { var i : Int; // Test OK assignments i = 0; g = 1.0; fact(3); bar.s = "hi"; typecheck(Int, i); // Test conversion assignments i = "123"; g = 1; fact(3.1); bar.s = 100; // Test bad assignments try { i = nil; } catch(e) { if(e == TypeCheck) "TypeCheck #1\n"; } try { g = bar; } catch(e) { if(e == TypeCheck) "TypeCheck #2\n"; } try { fact("hi"); } catch(e) { if(e == TypeCheck) "TypeCheck #3\n"; } try { bar.s = {nil,nil}; } catch(e) { if(e == TypeCheck) "TypeCheck #4\n"; } try { typecheck(Float, i); } catch(e) { if(e == TypeCheck) "TypeCheck #5\n"; } }