mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-04 14:20:26 +02:00
55 lines
1.7 KiB
Scheme
55 lines
1.7 KiB
Scheme
;;;; reader.test --- test the Guile parser -*- scheme -*-
|
|
;;;; Jim Blandy <jimb@red-bean.com> --- September 1999
|
|
|
|
(define exception:eof
|
|
(cons 'read-error "end of file$"))
|
|
|
|
(define exception:unexpected-rparen
|
|
(cons 'read-error "unexpected \")\"$"))
|
|
|
|
(define (read-string s)
|
|
(with-input-from-string s (lambda () (read))))
|
|
|
|
(with-test-prefix "reading"
|
|
(pass-if "0"
|
|
(equal? (read-string "0") 0))
|
|
(pass-if "1++i"
|
|
(equal? (read-string "1++i") '1++i))
|
|
(pass-if "1+i+i"
|
|
(equal? (read-string "1+i+i") '1+i+i))
|
|
(pass-if "1+e10000i"
|
|
(equal? (read-string "1+e10000i") '1+e10000i))
|
|
|
|
;; At one time the arg list for "Unknown # object: ~S" didn't make it out
|
|
;; of read.c. Check that `format' can be applied to this error.
|
|
(pass-if "error message on bad #"
|
|
(catch #t
|
|
(lambda ()
|
|
(read-string "#ZZZ")
|
|
;; oops, this # is supposed to be unrecognised
|
|
#f)
|
|
(lambda (key subr message args rest)
|
|
(apply format #f message args)
|
|
;; message and args are ok
|
|
#t))))
|
|
|
|
(pass-if-exception "radix passed to number->string can't be zero"
|
|
exception:out-of-range
|
|
(number->string 10 0))
|
|
(pass-if-exception "radix passed to number->string can't be one either"
|
|
exception:out-of-range
|
|
(number->string 10 1))
|
|
|
|
(with-test-prefix "mismatching parentheses"
|
|
(pass-if-exception "opening parenthesis"
|
|
exception:eof
|
|
(read-string "("))
|
|
(pass-if-exception "closing parenthesis following mismatched opening"
|
|
exception:unexpected-rparen
|
|
(read-string ")"))
|
|
(pass-if-exception "opening vector parenthesis"
|
|
exception:eof
|
|
(read-string "#("))
|
|
(pass-if-exception "closing parenthesis following mismatched vector opening"
|
|
exception:unexpected-rparen
|
|
(read-string ")")))
|