@[test(code_01)] var a: dao::int = 1 var b: dao::string = "x" var c: dao::list = {} var d: dao::tuple = (1,"a") @[test(code_01)] @[test(code_01)] @[test(code_01)] # Test auto-type casting: @[test(code_01)] var a : none|int = 123 var b = a + 100 @[test(code_01)] # no error, no output @[test(code_01)] @[test(code_01)] @[test(code_01)] var a : none|@T = 123 var b = a + 100 @[test(code_01)] # no error, no output @[test(code_01)] @[test(code_01)] @[test(code_01)] x = (none|@V)99 y = x + x @[test(code_01)] @[test(code_01)] @[test(code_01)] # Test recursive types: @[test(code_01)] type Node = tuple var node : Node = ( 123, none ) node.next = node io.writeln( node ) @[test(code_01)] @[test(code_01)] {{( 123, (...) )}} @[test(code_01)] @[test(code_01)] type Node = tuple var node : Node = ( 123, (Node)( 456, none ) ) node.next.next = node io.writeln( node ) @[test(code_01)] @[test(code_01)] {{( 123, ( 456, (...) ) )}} @[test(code_01)] @[test(code_01)] type Test1 = none | tuple type Test2 = none | tuple type Test3 = none | tuple type Test4 = none | tuple type Test5 = none | tuple type Test6 = none | tuple io.writeln( Test1 ?= Test2, Test1 ?= Test3, Test3 ?= Test4, Test5 ?= Test6 ) @[test(code_01)] @[test(code_01)] ^ {{false false true true}} $ @[test(code_01)]