(import (scheme base)
        (srfi 27)
        (scheme inexact)
        (picrin test))

(test-begin)

(define (rountrip-ok number)
  (let ((radix 10)) 
    (eqv? number (string->number (number->string number radix) radix))))

(test #t (rountrip-ok -nan.0))

(test #t (rountrip-ok +nan.0))

(test #t (rountrip-ok -inf.0))

(test #t (rountrip-ok +inf.0))

(test #t (rountrip-ok +0.0))

(test #t (rountrip-ok -0.0))

(test #t (rountrip-ok 0.0))

(test -inf.0 (string->number "-inf.0"))

(test +inf.0 (string->number "+inf.0"))

(test #t (nan? (string->number "-nan.0")))

(test #t (nan? (string->number "+nan.0")))

(define (random-roundtrip)
  (let ((r (random-real)))
    (if (rountrip-ok r)
      #t
      r)))

(test #t (random-roundtrip))
(test #t (random-roundtrip))
(test #t (random-roundtrip))
(test #t (random-roundtrip))
(test #t (random-roundtrip))
(test #t (random-roundtrip))
(test #t (random-roundtrip))
(test #t (random-roundtrip))
(test #t (random-roundtrip))
(test #t (random-roundtrip))
(test #t (random-roundtrip))
(test #t (random-roundtrip))
(test #t (random-roundtrip))

(test-end)