#!/usr/bin/ruby

# Test for declaration of variables with default values

var (x, y=755, z=777) = (666, 655);

assert_eq(x, 666);
assert_eq(y, 655);
assert_eq(z, 777);

var (a, *b) = (1,2,3,4);
assert_eq(a, 1);
assert_eq(b, [2,3,4]);

var *arr = (21,42,84);
assert_eq(arr, [21, 42, 84]);

var :hash = (a => 21, b => 42);
assert_eq(hash, Hash.new(a => 21, b => 42));

assert_eq([var(p, q) = (9,10)], [9, 10]);
assert_eq(p, 9);
assert_eq(q, 10);

assert_eq([var(s=7, t=3)], [7, 3]);
assert_eq(s, 7);
assert_eq(t, 3);

assert_eq([var x = 42], [42]);
assert_eq(x, 42);

# Default values or provided values
var (*v1 = (1,2,3))          = (21, 42);
var (:h1 = (a => 1, b => 2)) = (a => 42);

assert_eq(v1, [21, 42]);
assert_eq(h1, :(a => 42));

# Default values only
var (*v2 = (1,2,3));
var (:h2 = (a => 1, b => 2));

assert_eq(v2, [1,2,3]);
assert_eq(h2, :(a => 1, b => 2));

say "** Test passed!";