#!/usr/bin/ruby

#
## Tests for ilog(), ilog2() and ilog10().
#

for n in (1..100) {
    assert_eq(ilog(3**n, 3), n)
    assert_eq(ilog2(2**n), n)
    assert_eq(ilog10(10**n), n)
    assert_eq(ilog(3**n), log(3**n).int)
    assert_eq(ilog2(exp(n)), log2(exp(n)).int)
    assert_eq(ilog(exp(n), 3), log(exp(n), 3).int)
}

assert_eq(gather {
    var x = 0
    { take(x.next_pow!(3)) } * 5
}, [1, 3, 9, 27, 81])

assert_eq(gather {
    var x = 0
    { take(x.next_pow!(4)) } * 5
}, [1, 4, 16, 64, 256])

assert_eq(gather {
    var x = 0
    { take(x.next_pow2!) } * 5
}, [1, 2, 4, 8, 16])

assert_eq(2**4096     -> next_pow(2), 2**4097)
assert_eq(2**4096 - 1 -> next_pow(2), 2**4096)
assert_eq(2**4096 + 1 -> next_pow(2), 2**4097)

assert_eq(3**2000     -> next_pow(3), 3**2001)
assert_eq(3**2000 - 1 -> next_pow(3), 3**2000)
assert_eq(3**2000 + 1 -> next_pow(3), 3**2001)

say "** Test passed!"