(LET ((*REOPEN-OPEN-FILE* NIL)) (WITH-OPEN-FILE (COPY S :DIRECTION :OUTPUT) (STREAMP COPY)))
EQL-OK: T
(PROGN (SETF (FDEFINITION 'CLHS-ROOT) SAVED-CLHS-ROOT (FDEFINITION 'IMPNOTES-ROOT) SAVED-IMPNOTES-ROOT) (LIST (STRINGP (CLHS-ROOT)) (STRINGP (IMPNOTES-ROOT))))
EQUAL-OK: (T T)
(SYMBOLS-CLEANUP '(S S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 B1 B2 C1 C2 C3 C4 INPTW SY SAVED-CLHS-ROOT SAVED-IMPNOTES-ROOT TW EC STR1 STRGSTREAM OS OS1 IS ES S50 S49 *MY-INDENT-LEVEL*))
EQL-OK: NIL
(SETQ *PRINT-LENGTH* NIL)
EQL-OK: NIL
RUN-TEST: finished "streams" (0 errors out of 388 tests)
RUN-TEST: started #
(READ-FROM-STRING "123")
EQL-OK: 123
(PRIN1-TO-STRING 123)
EQUAL-OK: "123"
(SETQ *A* (MAKE-ARRAY 10 :ELEMENT-TYPE 'STRING-CHAR :FILL-POINTER 0))
EQUAL-OK: ""
(FORMAT *A* "XXX")
EQL-OK: NIL
*A*
EQUAL-OK: "XXX"
(DEFUN BIN-STREAM-TEST (&KEY (SIZE (INTEGER-LENGTH MOST-POSITIVE-FIXNUM)) (TYPE 'UNSIGNED-BYTE) (FILE-NAME "streamslong-tst-foo") (NUM-BYTES 10) (BYTES (IF (EQ TYPE 'SIGNED-BYTE) (LOOP :REPEAT NUM-BYTES :COLLECT (- (RANDOM (ASH 1 SIZE)) (ASH 1 (1- SIZE)))) (LOOP :REPEAT NUM-BYTES :COLLECT (RANDOM (ASH 1 SIZE)))))) (WITH-OPEN-FILE (FOO FILE-NAME :DIRECTION :OUTPUT :ELEMENT-TYPE (LIST TYPE SIZE)) (DOLIST (BYTE BYTES) (WRITE-BYTE BYTE FOO))) (UNWIND-PROTECT (WITH-OPEN-FILE (FOO FILE-NAME :DIRECTION :INPUT :ELEMENT-TYPE (LIST TYPE SIZE)) (LIST (STREAM-ELEMENT-TYPE FOO) (FILE-LENGTH FOO) BYTES (LOOP :FOR BYTE :IN BYTES :FOR NB = (READ-BYTE FOO) :COLLECT NB :UNLESS (= NB BYTE) :DO (FLET ((BY-OUT (SZ BY) (FORMAT NIL "~v,'0,' ,4:b" (+ SZ (FLOOR SZ 4)) BY))) (ERROR "~& * [(~s ~s)] ~a != ~a~%" TYPE SIZE (BY-OUT SIZE BYTE) (BY-OUT SIZE NB)))))) (DELETE-FILE FILE-NAME)))
EQL-OK: BIN-STREAM-TEST
foo
foo
(LOOP FOR SIZE FROM 2 TO 40 DO (BIN-STREAM-TEST :SIZE SIZE))
EQL-OK: NIL
(LOOP FOR SIZE FROM 2 TO 40 DO (BIN-STREAM-TEST :SIZE SIZE :TYPE 'SIGNED-BYTE))
EQL-OK: NIL
(LET ((NOTICED 'NIL) FILE-WRITTEN) (FLET ((NOTICE (X) (PUSH X NOTICED) X)) (UNWIND-PROTECT (PROGN (WITH-OPEN-FILE (S "streamslong-tst-footest.bin" :ELEMENT-TYPE '(UNSIGNED-BYTE 8) :DIRECTION :OUTPUT :IF-EXISTS :ERROR) (NOTICE (FILE-POSITION S)) (WRITE-BYTE 5 S) (WRITE-BYTE 6 S) (LET ((P (FILE-POSITION S))) (NOTICE P) (NOTICE (WHEN P (FILE-POSITION S (1- P))))) (WRITE-BYTE 7 S) (NOTICE (FILE-POSITION S)) (SETQ FILE-WRITTEN (TRUENAME S))) (WITH-OPEN-FILE (S FILE-WRITTEN :ELEMENT-TYPE '(UNSIGNED-BYTE 8) :DIRECTION :INPUT) (NOTICE (FILE-POSITION S)) (LET ((LENGTH (FILE-LENGTH S))) (NOTICE LENGTH) (WHEN LENGTH (DOTIMES (I LENGTH) (NOTICE (READ-BYTE S)))))) (NREVERSE NOTICED)) (DELETE-FILE FILE-WRITTEN))))
EQUAL-OK: (0 2 1 2 0 2 5 7)
(LET ((S (MAKE-STRING-INPUT-STREAM (MAKE-ARRAY 10 :ELEMENT-TYPE (ARRAY-ELEMENT-TYPE "") :DISPLACED-TO "abcdefghijklmnopqrst" :DISPLACED-INDEX-OFFSET 5)))) (PROG1 (LIST (READ-CHAR S) (READ-CHAR S) (FILE-POSITION S) (FILE-POSITION S 4) (READ-CHAR S) (FILE-POSITION S :START) (READ-CHAR S) (FILE-POSITION S :END) (FILE-POSITION S)) (CLOSE S)))
EQUAL-OK: (#\f #\g 2 4 #\j 0 #\f 10 10)
(LET ((S (MAKE-STRING-OUTPUT-STREAM))) (PROG1 (LIST (WRITE-CHAR #\a S) (WRITE-CHAR #\b S) (FILE-POSITION S) (GET-OUTPUT-STREAM-STRING S) (WRITE-STRING "foo" S) (FILE-POSITION S 1) (WRITE-CHAR #\z S) (GET-OUTPUT-STREAM-STRING S) (FILE-POSITION S :START) (WRITE-CHAR #\u S) (FILE-POSITION S :END) (WRITE-CHAR #\w S) (GET-OUTPUT-STREAM-STRING S)) (CLOSE S)))
EQUAL-OK: (#\a #\b 2 "ab" "foo" 1 #\z "fz" 0 #\u 1 #\w "uw")
(LET ((V (MAKE-ARRAY 3 :ADJUSTABLE T :FILL-POINTER 0 :ELEMENT-TYPE 'CHARACTER))) (WITH-OUTPUT-TO-STRING (S V) (LIST (WRITE-STRING "foo" S) (CONS (FILE-POSITION S) (COPY-SEQ V)) (FILE-POSITION S 2) (WRITE-STRING "bar" S) (CONS (FILE-POSITION S) (COPY-SEQ V)) (FILE-POSITION S :START) (WRITE-STRING "zot" S) (CONS (FILE-POSITION S) (COPY-SEQ V)) (FILE-POSITION S :END) (WRITE-STRING "plonk" S) (CONS (FILE-POSITION S) (COPY-SEQ V)) V)))
EQUAL-OK: ("foo" (3 . "foo") 2 "bar" (5 . "fobar") 0 "zot" (3 . "zot") 3 "plonk" (8 . "zotplonk") "zotplonk")
(LET ((F "streamslong-tst-foo") (S "12345") L) (WITH-OPEN-FILE (O F :DIRECTION :OUTPUT) (WRITE-STRING S O)) (WITH-OPEN-FILE (I F :BUFFERED T) (LISTEN I) (PUSH (READ-CHAR I) L)) (WITH-OPEN-FILE (I F :BUFFERED NIL) (LISTEN I) (PUSH (READ-CHAR I) L)) (DELETE-FILE F) L)
EQUAL-OK: (#\1 #\1)
(LET ((FILE "streamslong-tst-foo") S1 S2) (WITH-OPEN-FILE (OUT FILE :DIRECTION :OUTPUT) (WRITE OUT :STREAM OUT) (TERPRI OUT) (SETQ S1 (WRITE-TO-STRING OUT)) (FORCE-OUTPUT OUT) (APPEASE-CERRORS (WITH-OPEN-FILE (IN FILE :DIRECTION :INPUT) (SETQ S2 (READ-LINE IN))))) (DELETE-FILE FILE) (STRING= S1 S2))
WARNING: OPEN:
#