ikarus/src/tests/string-to-number.ss

66 lines
2.0 KiB
Scheme

(library (tests string-to-number)
(export test-string-to-number)
(import (ikarus) (tests framework))
(define (t x s)
(let ([fl (format "~a" (exact->inexact x))])
(unless (string=? s fl)
(error 'bignum->flonum
"incorrect result for ~s\n expected ~a, \n got ~a" x s fl))))
(define-syntax test*
(syntax-rules ()
[(_ name [str num] ...)
(define-tests name
[(lambda (x) (and x (= x num)))
(string->number str)]
...)]))
(test* test-string-to-number
("10" 10)
("1" 1)
("-17" -17)
("+13476238746782364786237846872346782364876238477"
13476238746782364786237846872346782364876238477)
("1/2" (/ 1 2))
("-1/2" (/ 1 -2))
("#x24" 36)
("#x-24" -36)
("#b+00000110110" 54)
("#b-00000110110/10" -27)
("#e10" 10)
("#e1" 1)
("#e-17" -17)
("#e#x24" 36)
("#e#x-24" -36)
("#e#b+00000110110" 54)
("#e#b-00000110110/10" -27)
("#x#e24" 36)
("#x#e-24" -36)
("#b#e+00000110110" 54)
("#b#e-00000110110/10" -27)
("#e1e1000" (expt 10 1000))
("#e-1e1000" (- (expt 10 1000)))
("#e1e-1000" (expt 10 -1000))
("#e-1e-1000" (- (expt 10 -1000)))
("#i1e100" (exact->inexact (expt 10 100)))
("#i1e1000" (exact->inexact (expt 10 1000)))
("#i-1e1000" (exact->inexact (- (expt 10 1000))))
("1e100" (exact->inexact (expt 10 100)))
("1.0e100" (exact->inexact (expt 10 100)))
("1.e100" (exact->inexact (expt 10 100)))
("0.1e100" (exact->inexact (expt 10 99)))
(".1e100" (exact->inexact (expt 10 99)))
("+1e100" (exact->inexact (expt 10 100)))
("+1.0e100" (exact->inexact (expt 10 100)))
("+1.e100" (exact->inexact (expt 10 100)))
("+0.1e100" (exact->inexact (expt 10 99)))
("+.1e100" (exact->inexact (expt 10 99)))
("-1e100" (exact->inexact (- (expt 10 100))))
("-1.0e100" (exact->inexact (- (expt 10 100))))
("-1.e100" (exact->inexact (- (expt 10 100))))
("-0.1e100" (exact->inexact (- (expt 10 99))))
("-.1e100" (exact->inexact (- (expt 10 99))))))