0.8.13.56:
[sbcl.git] / tests / print.impure.lisp
index 510a6b1..e3184bc 100644 (file)
     (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)))))
+
+;;; readable printing of arrays with *print-radix* t
+(let ((*print-radix* t) 
+      (*print-readably* t)
+      (*print-pretty* nil))
+  (let ((output (with-output-to-string (s)
+                 (write #2a((t t) (nil nil)) :stream s))))
+    (assert (equalp (read-from-string output) #2a((t t) (nil nil))))))
+
+;;; NIL parameters to "interpreted" FORMAT directives
+(assert (string= (format nil "~v%" nil) (string #\Newline)))
+
+;;; PRINC-TO-STRING should bind print-readably
+(let ((*print-readably* t))
+  (assert (string= (princ-to-string #\7)
+                  (write-to-string #\7 :escape nil :readably nil))))
+
 ;;; success
 (quit :unix-status 104)