57 lines
1.8 KiB
Scheme
57 lines
1.8 KiB
Scheme
; Test cases for string ports
|
|
|
|
; a string port is-a port (having read and write methods).
|
|
; a string port stores its contents in memory (unlike device ports).
|
|
; A read returns contents previously written.
|
|
; A string port is practically infinite.
|
|
|
|
; a string port is like a string
|
|
; a sequence of writes are like a sequence of appends to a string
|
|
|
|
|
|
; Note that each assert is in its own environment,
|
|
; so we can't define a global port outside????
|
|
; Why shouldn't this work?
|
|
; (define aStringPort (open-output-string))
|
|
; (assert `(port? aStringPort))
|
|
|
|
|
|
; open-output-string yields a port
|
|
(assert '(port? (open-output-string)))
|
|
|
|
; string read from port equals string written to port
|
|
; !!! with escaped double quote
|
|
(assert '(string=?
|
|
(let* ((aStringPort (open-output-string)))
|
|
(write "foo" aStringPort)
|
|
(get-output-string aStringPort))
|
|
"\"foo\""))
|
|
|
|
; string read from port equals string repr of symbol written to port
|
|
; !!! without escaped double quote
|
|
(assert '(string=?
|
|
(let* ((aStringPort (open-output-string)))
|
|
; !!! 'foo is-a symbol whose repr is three characters: foo
|
|
; write to a port writes the repr
|
|
(write 'foo aStringPort)
|
|
(get-output-string aStringPort))
|
|
(symbol->string 'foo)))
|
|
|
|
; What is read equals the string written.
|
|
; For edge case: writing more than 256 characters in two tranches
|
|
; where second write crosses end boundary of 256 char buffer.
|
|
|
|
; issue #9495
|
|
; Failing
|
|
;(assert '(string=?
|
|
; (let* ((aStringPort (open-output-string)))
|
|
; (write (string->symbol (make-string 250 #\A)) aStringPort)
|
|
; (write (string->symbol (make-string 7 #\B)) aStringPort)
|
|
; (get-output-string aStringPort))
|
|
; (string-append
|
|
; (make-string 250 #\A)
|
|
; (make-string 7 #\B))))
|
|
|
|
|
|
|