#!/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!";