#!/usr/bin/ruby
#
## Typed parameters
#
func add_nums(Number a, Number b) -> Object { # requires two numbers
a + b
}
assert_eq(add_nums(1, 2), 3);
var count = 0;
try { say add_nums("a", "b"); #`(run-time error: invalid type for parameters) }
catch { ++count }
assert_eq(count, 1);
#
## Typed parameters with optional values
#
func add_def(Number a=2, Number b=3) {
a + b
}
assert_eq(add_def(), 5);
assert_eq(add_def(b: 8), 10);
#
## Typed parameters with mandatory and optional values
#
func concat_dm(String a, String b="") -> String {
a + b
}
assert_eq(concat_dm("foo"), "foo");
assert_eq(concat_dm("foo", "bar"), "foobar");
say "** Test passed!";