#!/usr/bin/ruby

#
## Test implicit numeric conversions
#

class Foo(val) {
    method to_n {
        1+val
    }
}

assert_eq(3+"4", 7)
assert_eq(42+"1.5", 43.5)
assert_eq(42+true, 43)
assert_eq(42+false, 42)
assert_eq(10/"2", 5)
assert_eq(1/false, Inf)

var f = Foo(3)
assert_eq(42+f, 46)

assert_eq(43+[5,2,3,4], 47)

assert_eq(Complex(4,5)+f, Complex(8,5))
assert_eq(Complex(9,7)+f, Complex(13, 7))

assert_eq(42 - "-1.2", 43.2)

assert_eq(Complex(5,6) + "3+4i", Complex(5,6)+Complex(3,4))
assert_eq(Complex(3,4)*"-9+17i", Complex(-9, 17)*Complex(3,4))

f.val = Complex(2, 3)
assert_eq(Complex(4,5)+f, Complex(7,8))
assert_eq(42 + f, Complex(45, 3))

assert_eq(Complex(8, 4) + true,  Complex(9,4))
assert_eq(Complex(10,2) - false, Complex(10, 2))

assert_eq(Complex(1,2) / false, Complex(Inf, Inf))
assert_eq(Complex(3,4) / true,  Complex(3,4))

assert_eq(Inf + "12", Inf)
assert_eq(42 / "0", Inf)
assert_eq(42 + "1/2", 42.5)
assert_eq(42 * "-1/2", -21)
assert_eq(42 + "112381628946182648126487125648712487.4124127412741724", 112381628946182648126487125648712529.4124127412741724)

say "** Test passed!"