;;;; absolutely no warranty. See the COPYING and CREDITS files for
;;;; more information.
-(in-package :cl-user)
-
(load "assertoid.lisp")
+(use-package "ASSERTOID")
;;; type errors for inappropriate stream arguments, fixed in
;;; sbcl-0.7.8.19
'(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)