From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

#!/usr/bin/ruby
#
## Test 1
#
func test1(x, y=2, *z) {
assert_eq(x, 1);
assert_eq(y, 2);
assert_eq(z, [3,4]);
}
test1(z:(3,4), y:2, 1);
test1(z:(3,4), 1);
test1(1, z:(3,4));
#
## Test 2
#
func test2(x, y, z) {
assert_eq(x, 1);
assert_eq(y, 2);
assert_eq(z, 3);
}
test2(x: 1, 2, 3);
test2(y: 2, z: 3, 1);
test2(z: 3, 1, 2);
test2(z: 3, 1, y: 2);
#
## Test 3
#
func test3(a, b, c, d) {
assert_eq(a, 1);
assert_eq(b, 2);
assert_eq(c, 3);
assert_eq(d, 4);
}
test3(a:1, b:2, c:3, d:4);
test3(c:3, a:1, d:4, b:2);
test3(d:4, b:2, a:1, 3);
test3(b:2, 3, d:4, a:1);
test3(c:3, 2, a:1, 4);
test3(1, 2, 3, d:4);
test3(1, 2, d:4, c:3);
#
## Test 4
#
func test4(a=1, b=9, c=3) {
assert_eq(a, 1);
assert_eq(b, 2);
assert_eq(c, 3);
}
test4(b:2, 1, 3);
test4(1, 3, b:2);
test4(b:2);
test4(b:2, c:3);
#
## Test 5
#
func test5(a, b) { [a, b] }
assert_eq(test5(23, b:42), [23, 42])
assert_eq(test5(42, a:23), [23, 42])
assert_eq(test5(b:42, 23), [23, 42])
assert_eq(test5(23, b:42), [23, 42])
assert_eq(test5(a:23, 42), [23, 42])
#
## Test 6
#
func test6(a, b=42, c) { [a,b,c] }
assert_eq(test6(1, c: 2), [1, 42, 2])
assert_eq(test6(c: 2, 1), [1, 42, 2])
assert_eq(test6(c: 2, a: 1), [1, 42, 2])
assert_eq(test6(a: 1, c: 2), [1, 42, 2])
#
## Test 7
#
assert((c: 2).kind_of(NamedParam))
assert_eq(c: 2, NamedParam("c", 2))
assert_eq(c: (2, 3, 4), NamedParam("c", 2, 3, 4))
do {
var t = foo: (1, 2, 3)
assert_eq(t.name, "foo")
assert_eq([t.value], [1, 2, 3])
assert_eq(t, NamedParam(:foo, 1, 2, 3))
}
say "** Test passed!";