#!/usr/bin/ruby

# Tests for base conversions.

func dec2bin(n) {
    Num(n.base(2), 10)
}

func bin2dec(n) {
    Num(n.base(10), 2)
}

assert_eq(dec2bin(23.34375), 10111.01011)
assert_eq(bin2dec(1011.11101), 11.90625)

assert_eq(dec2bin(23.34375.float), 10111.01011.float)
assert_eq(bin2dec(1011.11101.float), 11.90625.float)

assert_eq(dec2bin(23.34375.complex), 10111.01011.complex)
assert_eq(bin2dec(1011.11101.complex), 11.90625.complex)

assert_eq(Num("101010",  2),  42)
assert_eq(Num("h.i",     36), 17.5)
assert_eq(Num("63/2b",   16), 99/43)
assert_eq(Num("(h.i 5)", 36), 17.5+5i)

for t in [
    42, -42, bern(42), bern(44), sqrt(2), -sqrt(3),
    complex(Num.pi, Num.e), -complex(Num.pi, Num.e),
    complex(0, Num.pi), complex(0, -sqrt(2))
] {
    assert_eq(Num(t.base(2), 2), t)
    assert_eq(Num(t.base(9), 9), t)
    assert_eq(Num(t.base(10), 10), t)
    assert_eq(Num(t.base(12), 12), t)
    assert_eq(Num(t.base(33), 33), t)
    assert_eq(Num(t.base(36), 36), t)
}

say "** Test passed!"