Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

#!/usr/bin/ruby
# Tests for `Num.digits(base)` and `Num.sumdigits(base)`. Also for `Arr.digits2num(base)`.
for a in (100 .. 103) {
var N = a!
var b = (a>>1 + 1)!
assert_eq(N.digits(b).sum, N.sumdigits(b))
assert_eq(N.digits(b).digits2num(b), N)
}
for a in (1..100) {
var N = a!.irand
var b = irand(2**64)
assert_eq(N.digits(b).sum, N.sumdigits(b))
assert_eq(N.digits(b).digits2num(b), N)
}
for a in (1..20, 90..100) {
var N = a!.irand
for b in (60..66) {
assert_eq(N.digits(b).sum, N.sumdigits(b))
assert_eq(N.digits(b).digits2num(b), N)
}
}
assert_eq([5040, 1234].digits2num(10), 1234*10 + 5040)
assert_eq(10.digits2num([5040, 1234]), 1234*10 + 5040)
assert_eq(
20.of {|k| 2.digits2num(0..k) },
20.of {|n| 2**(n+1) * (n-1) + 2 }
)
assert_eq(
20.of {|k| 2.digits2num(1..k) },
20.of {|n| 2**n * (n-1) + 1 }
)
assert_eq(
20.of {|k| 10.digits2num(0..k) },
20.of {|n| ((9*n - 1) * 10**n + 1) * 10 / 81 }
)
assert_eq(
20.of {|k| 10.digits2num(1..k) },
20.of {|n| (10**n * (9*n - 1) + 1)/81 }
)
say "** Test passed!"