(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)
(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)