0.8.6.13:
[sbcl.git] / tests / stream.impure.lisp
index d2891f4..71a7a8c 100644 (file)
                '(sb-impl::string-output-stream string-stream stream)))
 
 \f
+;;; improper buffering on (SIGNED-BYTE 8) streams (fixed by David Lichteblau):
+(let ((p "signed-byte-8-test.data"))
+  (with-open-file (s p
+                    :direction :output
+                    :element-type '(unsigned-byte 8)
+                    :if-exists :supersede)
+    (write-byte 255 s))
+  (with-open-file (s p :element-type '(signed-byte 8))
+    (assert (= (read-byte s) -1)))
+  (delete-file p))
+\f
+;;; :IF-EXISTS got :ERROR and NIL the wrong way round (reported by
+;;; Milan Zamazal)
+(let* ((p "this-file-will-exist")
+       (stream (open p :direction :output :if-exists :error)))
+  (assert (null (with-open-file (s p :direction :output :if-exists nil) s)))
+  (assert (raises-error?
+          (with-open-file (s p :direction :output :if-exists :error))))
+  (close stream)
+  (delete-file p))
+\f
+(assert (raises-error? (read-byte (make-string-input-stream "abc"))
+                      type-error))
+(assert (raises-error? (with-open-file (s "/dev/zero")
+                        (read-byte s))
+                      type-error))
+;;; bidirectional streams getting confused about their position
+(let ((p "bidirectional-stream-test"))
+  (with-open-file (s p :direction :output :if-exists :supersede)
+    (with-standard-io-syntax
+      (format s "~S ~S ~S~%" 'these 'are 'symbols)))
+  (with-open-file (s p :direction :io :if-exists :overwrite)
+    (read s)
+    (with-standard-io-syntax
+      (prin1 'insert s)))
+  (with-open-file (s p)
+    (assert (string= (read-line s) "THESE INSERTMBOLS")))
+  (delete-file p))
 ;;; success
 (quit :unix-status 104)