From: Juho S. <js...@us...> - 2006-03-15 04:21:12
|
Update of /cvsroot/sbcl/sbcl/tests In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11199/tests Modified Files: stream.pure.lisp Log Message: 0.9.10.33: Fix CL:LISTEN to always return NIL at EOF, as required by CLTS. (Patch by Stephen Compall on sbcl-devel "Re: fd-stream listen in fd-stream-misc-routine") (Also "oops". I somehow attributed 0.9.10.32 to the wrong James). Index: stream.pure.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/tests/stream.pure.lisp,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- stream.pure.lisp 10 Aug 2005 07:57:33 -0000 1.15 +++ stream.pure.lisp 15 Mar 2006 04:21:08 -0000 1.16 @@ -299,3 +299,36 @@ (assert (char= (peek-char t (make-string-input-stream " a")) #\a)) (set-syntax-from-char #\Space #\a) (assert (char= (peek-char t (make-string-input-stream " a")) #\Space))) + +;;; It is actually easier to run into the problem exercised by this +;;; test with sockets, due to their delays between availabilities of +;;; data. However edgy the case may be for normal files, however, +;;; there is still a case to be found in which CL:LISTEN answers +;;; improperly. +;;; +;;; This test assumes that buffering is still done until a buffer of +;;; SB-IMPL::BYTES-PER-BUFFER bytes is filled up, that the buffer may +;;; immediately be completely filled for normal files, and that the +;;; buffer-fill routine is responsible for figuring out when we've +;;; reached EOF. +(with-test (:name (stream listen-vs-select)) + (let ((listen-testfile-name "stream.impure.lisp.testqfile") + ;; If non-NIL, size (in bytes) of the file that will exercise + ;; the LISTEN problem. + (bytes-per-buffer-sometime + (and (boundp 'sb-impl::bytes-per-buffer) + (symbol-value 'sb-impl::bytes-per-buffer)))) + (when bytes-per-buffer-sometime + (unwind-protect + (progn + (with-open-file (stream listen-testfile-name + :direction :output :if-exists :error + :element-type '(unsigned-byte 8)) + (dotimes (n bytes-per-buffer-sometime) + (write-byte 113 stream))) + (with-open-file (stream listen-testfile-name + :direction :input :element-type '(unsigned-byte 8)) + (dotimes (n bytes-per-buffer-sometime) + (read-byte stream)) + (assert (not (listen stream))))) + (ignore-errors (delete-file listen-testfile-name)))))) |