X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fprint.impure.lisp;h=bbaf4cb7c10ea350f77911fdecd19477d5feb905;hb=c8cc0137e55e6179f6af344f42e54f514660f68b;hp=946c1a5c021ffe25488567b9f5ef47602b67944c;hpb=f7662559d03e5076f5e3cbc236f1cf82467a4b60;p=sbcl.git diff --git a/tests/print.impure.lisp b/tests/print.impure.lisp index 946c1a5..bbaf4cb 100644 --- a/tests/print.impure.lisp +++ b/tests/print.impure.lisp @@ -112,15 +112,22 @@ (print (make-array '(1 2 0)) s))))) '(1 2 0))) -(assert (multiple-value-bind (result error) - (ignore-errors (read-from-string - (with-output-to-string (s) - (let ((*print-readably* t)) - (print (make-array '(1 0 1)) s))))) - ;; it might not be readably-printable - (or (typep error 'print-not-readable) - ;; or else it had better have the same dimensions - (equal (array-dimensions result) '(1 0 1))))) +(dolist (array (list (make-array '(1 0 1)) + (make-array 0 :element-type nil) + (make-array 1 :element-type 'base-char) + (make-array 1 :element-type 'character))) + (assert (multiple-value-bind (result error) + (ignore-errors (read-from-string + (with-output-to-string (s) + (let ((*print-readably* t)) + (print array s))))) + ;; it might not be readably-printable + (or (typep error 'print-not-readable) + (and + ;; or else it had better have the same dimensions + (equal (array-dimensions result) (array-dimensions array)) + ;; and the same element-type + (equal (array-element-type result) (array-element-type array))))))) ;;; before 0.8.0.66 it signalled UNBOUND-VARIABLE (write #(1 2 3) :pretty nil :readably t) @@ -206,5 +213,23 @@ (let ((answer (write-to-string '(bar foo :boo 1) :pretty t :escape t))) (assert (string= answer "(?BAR? ?FOO? ?:BOO? ?1?)"))))) +;;; FORMAT string compile-time checker failure, reported by Thomas +;;; F. Burdick +(multiple-value-bind (f w-p f-p) + (compile nil '(lambda () (format nil "~{"))) + (assert (and w-p f-p)) + (assert (nth-value 1 (ignore-errors (funcall f))))) + +;;; floating point print/read consistency +(let ((x (/ -9.349640046247849d-21 -9.381494249123696d-11))) + (let ((y (read-from-string (write-to-string x :readably t)))) + (assert (eql x y)))) + +(let ((x1 (float -5496527/100000000000000000)) + (x2 (float -54965272/1000000000000000000))) + (assert (or (equal (multiple-value-list (integer-decode-float x1)) + (multiple-value-list (integer-decode-float x2))) + (string/= (prin1-to-string x1) (prin1-to-string x2))))) + ;;; success (quit :unix-status 104)