#!/usr/bin/ruby

class Foo {
    has (foo, bar) = (1, 2)
}

var f1 = Foo();

assert_eq(f1.foo, 1);
assert_eq(f1.bar, 2);

f1.foo = 42;
f1.bar = 99;

var f2 = Foo();
assert_eq(f1.foo, 42);
assert_eq(f1.bar, 99);
assert_eq(f2.foo, 1);
assert_eq(f2.bar, 2);

class Bar(a, b) {
    has (foo=1, bar=2);

    method init {
        foo += a;
        bar += b
    }
}

var obj1 = Bar(21, 42);
var obj2 = Bar(100, 200);

assert_eq(obj1.foo, 22);
assert_eq(obj1.bar, 44);

assert_eq(obj2.foo, 101);
assert_eq(obj2.bar, 202);


class Baz(a, b) {
    has foo = 42;
    has bar = "hello";

    method display {
        say foo;
        say bar;
    }

    method change {
        foo = a;
        bar = b;
    }
}

var baz = Baz(21, "Sidef");
baz.display;

assert_eq(baz.foo, 42);
assert_eq(baz.bar, "hello");

baz.change;
baz.display;

assert_eq(baz.foo, 21);
assert_eq(baz.bar, "Sidef");

say "** Test passed!";