/
stream.impure.lisp
80 lines (71 loc) · 2.99 KB
/
stream.impure.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
;;;; tests related to Lisp streams
;;;; This software is part of the SBCL system. See the README file for
;;;; more information.
;;;;
;;;; While most of SBCL is derived from the CMU CL system, the test
;;;; files (like this one) were written from scratch after the fork
;;;; from CMU CL.
;;;;
;;;; This software is in the public domain and is provided with
;;;; absolutely no warranty. See the COPYING and CREDITS files for
;;;; more information.
(load "assertoid.lisp")
(use-package "ASSERTOID")
;;; type errors for inappropriate stream arguments, fixed in
;;; sbcl-0.7.8.19
(locally
(declare (optimize (safety 3)))
(assert (raises-error? (make-two-way-stream (make-string-output-stream)
(make-string-output-stream))
type-error))
(assert (raises-error? (make-two-way-stream (make-string-input-stream "foo")
(make-string-input-stream "bar"))
type-error))
;; the following two aren't actually guaranteed, because ANSI, as it
;; happens, doesn't say "should signal an error" for
;; MAKE-ECHO-STREAM. It's still good to have, but if future
;; maintenance work causes this test to fail because of these
;; MAKE-ECHO-STREAM clauses, consider simply removing these clauses
;; from the test. -- CSR, 2002-10-06
(assert (raises-error? (make-echo-stream (make-string-output-stream)
(make-string-output-stream))
type-error))
(assert (raises-error? (make-echo-stream (make-string-input-stream "foo")
(make-string-input-stream "bar"))
type-error))
(assert (raises-error? (make-concatenated-stream
(make-string-output-stream)
(make-string-input-stream "foo"))
type-error)))
;;; bug 225: STRING-STREAM was not a class
(eval `(defgeneric bug225 (s)
,@(mapcar (lambda (class)
`(:method :around ((s ,class)) (cons ',class (call-next-method))))
'(stream string-stream sb-impl::string-input-stream
sb-impl::string-output-stream))
(:method (class) nil)))
(assert (equal (bug225 (make-string-input-stream "hello"))
'(sb-impl::string-input-stream string-stream stream)))
(assert (equal (bug225 (make-string-output-stream))
'(sb-impl::string-output-stream string-stream stream)))
;;; 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))
;;; :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))
;;; success
(quit :unix-status 104)