#!/usr/bin/ruby
#
## Default values for function and method parameters
#
#
## Test 1
#
func test1(a, b, c=a+b, d=c+b) {
assert_eq(c, a+b);
assert_eq(d, c+b);
}
test1(1, 2);
test1(1, 2, 3, 5);
test1(42, 99);
#
## Test 2
#
func test2(a, b=(a+42), c=21+a+b) {
assert_eq(b, a+42);
assert_eq(c, 21+a+b);
}
test2(100);
test2(100, 100+42, 100+100+42+21);
#
## Test 3
#
func test3(a=nil, b: 21, c=42) {
assert_eq(b, 21);
assert_eq(c, 42);
assert_eq(a, 13) if defined(a);
}
test3();
test3(b: 21);
test3(a: 13);
test3(13);
#
## Test 4 (slurpy parameters with default values)
#
func test4(*a=(1,2,3)) {
a;
}
assert_eq(test4(), [1,2,3]);
assert_eq(test4(21, 42), [21, 42]);
say "** Test passed!";