#lang scheme/base
(require (planet neil/testeez:1:1/testeez)
"numspell.ss")
(testeez
"numspell"
(test/equal "" (number->english 0) "zero")
(test/equal "" (number->english 1) "one")
(test/equal "" (number->english 2) "two")
(test/equal "" (number->english 3) "three")
(test/equal "" (number->english 4) "four")
(test/equal "" (number->english 5) "five")
(test/equal "" (number->english 6) "six")
(test/equal "" (number->english 7) "seven")
(test/equal "" (number->english 8) "eight")
(test/equal "" (number->english 9) "nine")
(test/equal "" (number->english 10) "ten")
(test/equal "" (number->english 11) "eleven")
(test/equal "" (number->english 12) "twelve")
(test/equal "" (number->english 13) "thirteen")
(test/equal "" (number->english 14) "fourteen")
(test/equal "" (number->english 15) "fifteen")
(test/equal "" (number->english 16) "sixteen")
(test/equal "" (number->english 17) "seventeen")
(test/equal "" (number->english 18) "eighteen")
(test/equal "" (number->english 19) "nineteen")
(test/equal "" (number->english 20) "twenty")
(test/equal "" (number->english 21) "twenty-one")
(test/equal "" (number->english 30) "thirty")
(test/equal "" (number->english 40) "forty")
(test/equal "" (number->english 50) "fifty")
(test/equal "" (number->english 60) "sixty")
(test/equal "" (number->english 70) "seventy")
(test/equal "" (number->english 80) "eighty")
(test/equal "" (number->english 90) "ninety")
(test/equal "" (number->english 100) "one hundred")
(test/equal "" (number->english 102) "one hundred two")
(test/equal "" (number->english 1002) "one thousand two")
(test/equal "" (number->english 10002) "ten thousand two")
(test/equal "" (number->english 100002) "one hundred thousand two")
(test/equal "" (number->english 1000002) "one million two")
(test/equal "" (number->english 10000002) "ten million two")
(test/equal "" (number->english 100000002) "one hundred million two")
(test/equal "" (number->english 1000000002) "one billion two")
(test/equal "" (number->english 1000000000002) "one trillion two")
(test/equal "" (number->english 100020003000) "one hundred billion twenty million three thousand")
(test/equal ""
(number->english 123)
"one hundred twenty-three")
(test/equal ""
(number->english 1234)
"one thousand two hundred thirty-four")
(test/equal ""
(number->english 12345)
"twelve thousand three hundred forty-five")
(test/equal ""
(number->english 123456)
"one hundred twenty-three thousand four hundred fifty-six")
(test/equal
""
(number->english 1234567)
"one million two hundred thirty-four thousand five hundred sixty-seven")
(test/equal
""
(number->english 123456789012345678901234567890)
"one hundred twenty-three octillion four hundred fifty-six septillion seven hundred eighty-nine sextillion twelve quintillion three hundred forty-five quadrillion six hundred seventy-eight trillion nine hundred one billion two hundred thirty-four million five hundred sixty-seven thousand eight hundred ninety")
(test/equal ""
(number->english 1/3)
"one over three")
(test/equal ""
(number->english 123.0123)
"one hundred twenty-three point zero one two three")
(test-define ""
f
(lambda (n)
(let ((x (expt 10 n)))
(list (number->short-scale-english x)
(number->long-scale-english x)))))
(test/equal "" (f 3) '("one thousand" "one thousand"))
(test/equal "" (f 6) '("one million" "one million"))
(test/equal "" (f 9) '("one billion" "one thousand million"))
(test/equal "" (f 12) '("one trillion" "one billion"))
(test/equal "" (f 15) '("one quadrillion" "one thousand billion"))
(test/equal "" (f 18) '("one quintillion" "one trillion"))
(test/equal "" (number->english -1) "negative one")
(test/equal "Scheme implementation's infinity print form check"
(let ((x (exact->inexact (expt 7 1999))))
(if (member x
'(+inf.0 "#i1/0" "#{Inf}" "+#.#" "+inf" "+inf." "+inf.0"
"+infinity.0"))
'recognized
`(unrecognized ,x)))
'recognized)
(test/equal ""
(sqrt -1)
0+1i))