#!/usr/bin/ruby

#
## Test array and hash lookups
#

var a = %w(a b c d e f)

var h = Hash(
    a => 1,
    b => 2,
    c => 3,
    d => 4,
)

assert_eq(a[0], 'a')
assert_eq(a[3], 'd')
assert_eq(a[-1], 'f')

assert_eq(h{:a}, 1)
assert_eq(h{:c}, 3)
assert_eq(h{:d}, 4)


class Foo(k,i) {
    method to_s {
        k
    }
    method to_n {
        i
    }
}

var f = Foo("c", 3)
var g = Foo("b", 2)

assert_eq(a[f], 'd')
assert_eq(h{f}, 3)

assert_eq([a[f,g,f]], ['d','c','d'])
assert_eq([h{f,g,f}], [3,2,3])

g.k = 'a'

assert_eq(h{g}, 1)
assert_eq(h{f}, 3)

g.i = -1

assert_eq(a[g], 'f')
assert_eq(a[f], 'd')

do {
    var _ = [99, 100, 101, 102]
    assert_eq(.[2], 101)
}

do {
    var x = [42, 43, 44, 45, 46];
    assert_eq(x.[3], 45)
}

do {
    var z = Hash(a => 1, b => 2, c => 3)
    assert_eq(z.{:b}, 2)
}

do {
    var _ = Hash(a => 1, b => 2, c => 3)
    assert_eq(.{:c}, 3)
}

assert_eq([[1,2],[3,4],[5,6]].map { .[0] }, [1, 3, 5])
assert_eq([[1,2],[3,4],[5,6]].map { .[1] }, [2, 4, 6])

do {
    var arr = %n[1,2,3,4,5,1]
    assert_eq(freq(arr){1}, 2)
    assert_eq(freq(arr){2}, 1)
}

say "** Test passed!"