X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fstream.impure.lisp;h=f91b1590179acd14d2b76b70bfab10dc8937fbf5;hb=9dcd91eba92f6f2db9ae65d7640f2cd2f4ee2a8b;hp=e7036b2c247e840a8602b3945c2fe0c76d7f66d1;hpb=c7c7bab2b37d8b9fbda8f955f09540db17573afa;p=sbcl.git diff --git a/tests/stream.impure.lisp b/tests/stream.impure.lisp index e7036b2..f91b159 100644 --- a/tests/stream.impure.lisp +++ b/tests/stream.impure.lisp @@ -91,7 +91,10 @@ (with-standard-io-syntax (prin1 'insert s))) (with-open-file (s p) - (assert (string= (read-line s) "THESE INSERTMBOLS"))) + (let ((line (read-line s)) + (want "THESE INSERTMBOLS")) + (unless (equal line want) + (error "wanted ~S, got ~S" want line)))) (delete-file p)) ;;; :DIRECTION :IO didn't work on non-existent pathnames @@ -209,6 +212,14 @@ (read-sequence sequence stream) (assert (equalp sequence #(255))))) + (let ((sequence (make-array 1))) + (with-open-file (stream pathname + :direction :input + :external-format :latin-1 + :element-type 'character) + (read-sequence sequence stream) + (assert (equalp sequence #(#.(code-char 255)))))) + ;; Check the fast path works for (UNSIGNED-BYTE 8) and (SIGNED-BYTE ;; 8) vectors. (let ((sequence (make-array 1 :element-type '(unsigned-byte 8)))) @@ -225,8 +236,8 @@ (read-sequence sequence stream) (assert (equalp sequence #(-1))))) - ;; A bivalent stream can be read to a unsigned-byte vector or a - ;; string + ;; A bivalent stream can be read to a unsigned-byte vector, a + ;; string, or a generic vector (let ((sequence (make-array 1 :element-type '(unsigned-byte 8)))) (with-open-file (stream pathname @@ -243,6 +254,14 @@ (read-sequence sequence stream) (assert (equalp sequence #(#.(code-char 255)))))) + (let ((sequence (make-array 1))) + (with-open-file (stream pathname + :direction :input + :external-format :latin-1 + :element-type :default) + (read-sequence sequence stream) + (assert (equalp sequence #(#.(code-char 255)))))) + ;; Check that a TYPE-ERROR is signalled for incompatible (sequence, ;; stream) pairs. @@ -275,15 +294,15 @@ (let ((sequence (make-array 1 :element-type '(signed-byte 8)))) (with-open-file (stream pathname :direction :input + :external-format :latin1 :element-type :default) (handler-case (progn (read-sequence sequence stream) (error "READ-SEQUENCE didn't signal an error")) (type-error (condition) - (assert (= (type-error-datum condition) 255)) + (assert (eql (type-error-datum condition) (code-char 255))) (assert (subtypep (type-error-expected-type condition) '(signed-byte 8)))))))) - ;;; Check WRITE-SEQUENCE signals a TYPE-ERROR when the stream can't ;;; write a sequence element. @@ -296,6 +315,8 @@ (let ((pathname "write-sequence.data") (generic-sequence (make-array 1 :initial-contents '(255))) + (generic-character-sequence (make-array 1 :initial-element #\a)) + (generic-mixed-sequence (make-array 2 :initial-element #\a)) (string (make-array 1 :element-type 'character :initial-element (code-char 255))) (unsigned-sequence (make-array 1 @@ -304,6 +325,9 @@ (signed-sequence (make-array 1 :element-type '(signed-byte 8) :initial-contents '(-1)))) + + (setf (aref generic-mixed-sequence 1) 255) + ;; Check the slow path for generic vectors. (with-open-file (stream pathname :direction :output @@ -311,6 +335,12 @@ :element-type '(unsigned-byte 8)) (write-sequence generic-sequence stream)) + (with-open-file (stream pathname + :direction :output + :if-exists :supersede + :element-type 'character) + (write-sequence generic-character-sequence stream)) + ;; Check the fast path for unsigned and signed vectors. (with-open-file (stream pathname :direction :output @@ -324,7 +354,8 @@ :element-type '(signed-byte 8)) (write-sequence signed-sequence stream)) - ;; Bivalent streams on unsigned-byte and strings + ;; Bivalent streams on unsigned-byte vectors, strings, and a simple + ;; vector with mixed characters and bytes (with-open-file (stream pathname :direction :output @@ -339,6 +370,13 @@ :element-type :default) (write-sequence string stream)) + (with-open-file (stream pathname + :direction :output + :external-format :latin-1 + :if-exists :supersede + :element-type :default) + (write-sequence generic-mixed-sequence stream)) + ;; Check a TYPE-ERROR is signalled for unsigned and signed vectors ;; which are incompatible with the stream element type. (with-open-file (stream pathname @@ -377,4 +415,28 @@ (assert (subtypep (type-error-expected-type condition) '(unsigned-byte 8))))))) +;;; writing looong lines. takes way too long and way too much space +;;; to test on 64 bit platforms +#-#.(cl:if (cl:= sb-vm:n-word-bits 64) '(and) '(or)) +(progn + (defun write-n-chars (n stream) + (format t "~&/writing ~D chars on a single line~%" n) + (finish-output t) + (loop repeat n + do (write-char #\x stream)) + (terpri stream) + n) + + (let ((test "long-lines-write-test.tmp")) + (unwind-protect + (with-open-file (f test + :direction :output + :external-format :ascii + :element-type 'character + :if-does-not-exist :create + :if-exists :supersede) + (write-n-chars (+ most-positive-fixnum 7) f)) + (when (probe-file test) + (delete-file test))))) + ;;; success