print('-- test functions --') fun add(a, b) { return a + b } print(add) fun add2(a, b) { let c := a + b return c } print(add2) fun mult(a, b) { return a * b } print(mult) fun noArgs() { let url := 'basdfasdf' let second := 2 + 3 return second } print(noArgs) fun empty() {} fun empty2() {} fun empty3() {} fun noReturn() { let a := 1 let b := 2 let c := a + b } fun emptyReturn() { return } fun emptyReturnBeforeOtherStuff() { return ; 2 + 2 } fun emptyReturnBeforeOtherStuffNoSemicolon() { // This will return 4 because whitespace is omitted return 2 + 2 } fun ifThenReturn() { // make sure this is not a placeholder {return} if (false) { return } return 4 } print(add(3, 4)) print(add(3, 4) + 100 + add(1, 1)) print(noArgs() ?? -1) print(empty() ?? -1) print(empty2() ?? -1) print(empty3() ?? -1) print(noReturn() ?? -1) print(emptyReturn() ?? -1) print(emptyReturnBeforeOtherStuff() ?? -1) print(emptyReturnBeforeOtherStuffNoSemicolon() ?? -1) print(ifThenReturn() ?? -1) print(mult(add(3, 4) + 100 + add(2, 1), 2)) print(mult(add2(3, 4) + 100 + add2(2, 1), 10)) // Call functions with different argument counts fun printArgs(arg1, arg2, arg3, arg4, arg5, arg6, arg7) { print(arg1, arg2, arg3, arg4, arg5, arg6, arg7) } let printArgs2 := (arg1, arg2, arg3, arg4, arg5, arg6, arg7) -> { print(arg1, arg2, arg3, arg4, arg5, arg6, arg7) } printArgs(1, 2, 3, 4, 5, 6, 7) printArgs2(1, 2, 3, 4, 5, 6, 7) printArgs(1, 2, 3, 4, 5, 6) printArgs2(1, 2, 3, 4, 5, 6) printArgs(1, 2, 3, 4, 5) printArgs2(1, 2, 3, 4, 5) printArgs() printArgs2()