#!/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!"