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