~ chicken-core (master) /tests/reader-tests.scm
Trap1;;;; reader-tests.scm23(import (only chicken.io read-line read-string)4 (only chicken.port with-input-from-string with-output-to-string)5 chicken.read-syntax)67(set-sharp-read-syntax! #\& (lambda (p) (read p) (values)))8(set-sharp-read-syntax! #\^ (lambda (p) (read p)))9(set-read-syntax! #\! (lambda (p) (read-line p) (values)))1011(define output12 (with-output-to-string13 (lambda ()14 (print "hi") ! this is fortran15 (print "foo") #&(print "amp-comment") (print "baz")16 #^(print "bye"))))1718!! output:19!! hi20!! foo21!! baz22!! bye2324(assert (string=? output "hi\nfoo\nbaz\nbye\n"))25(assert (string=? " ." (with-input-from-string "\x20;\u0020\U00000020\056" read-string)))2627(set-read-syntax! #\! #f)28(assert (equal? '! (with-input-from-string "! " read)))2930;; unicode3132(set-read-syntax! #\⋄ (lambda (p) (vector (read p))))3334(assert (equal? '#(99) (with-input-from-string " ⋄99" read)))3536;; parameterized read-syntax3738(set-parameterized-read-syntax! #\&39 (lambda (p n)40 (let ((x (read p)))41 (let loop ((n n))42 (if (zero? n) '()43 (cons x (loop (- n 1))))))))4445(assert (equal? '(4 4 4) (with-input-from-string "#3&4" read)))