#!/usr/bin/ruby

class Foo() {

    has a = {|n| n+42 }
    has b = {|n| n+99 }

    method b_block {
        b
    }
}

class Bar < Foo {
    method a_block {
        self.a
    }
}

assert_eq(Foo().a()(42), 42+42)
assert_eq(Bar().a()(43), 43+42)

var foo_obj = Foo()
var bar_obj = Bar()

assert_eq(bar_obj.a, foo_obj.a)
assert_eq(bar_obj.b, foo_obj.b)

assert_eq(bar_obj.a_block, foo_obj.a)
assert_eq(bar_obj.b_block, foo_obj.b)
assert_eq(foo_obj.b_block, bar_obj.b)

assert_eq(bar_obj.b_block()(1), 100)
assert_eq(foo_obj.b_block()(1), 100)

assert_eq(bar_obj.a_block()(10), 52)

say "** Test passed!"