0.8.10.13:
[sbcl.git] / tests / pprint.impure.lisp
index 216c9e0..a88e54a 100644 (file)
 ;;; way to make an automated test:
 ;;;  (LET ((*PRINT-CIRCLE* T)) (DESCRIBE (MAKE-HASH-TABLE)))
 
+;;; bug 263: :PREFIX, :PER-LINE-PREFIX and :SUFFIX arguments of
+;;; PPRINT-LOGICAL-BLOCK may be complex strings
+(let ((list '(1 2 3))
+      (prefix (make-array 2
+                          :element-type 'character
+                          :displaced-to ";x"
+                          :fill-pointer 1))
+      (suffix (make-array 2
+                          :element-type 'character
+                          :displaced-to ">xy"
+                          :displaced-index-offset 1
+                          :fill-pointer 1)))
+  (assert (equal (with-output-to-string (s)
+                   (pprint-logical-block (s list
+                                            :per-line-prefix prefix
+                                            :suffix suffix)
+                     (format s "~{~W~^~:@_~}" list)))
+                 (format nil ";1~%~
+                              ;2~%~
+                              ;3x"))))
+
+;;; bug 141b: not enough care taken to disambiguate ,.FOO and ,@FOO
+;;; from , .FOO and , @FOO
+(assert (equal
+        (with-output-to-string (s)
+          (write '`(,  .foo) :stream s :pretty t :readably t))
+        "`(, .FOO)"))
+(assert (equal
+        (with-output-to-string (s)
+          (write '`(,  @foo) :stream s :pretty t :readably t))
+        "`(, @FOO)"))
+(assert (equal
+        (with-output-to-string (s)
+          (write '`(,  ?foo) :stream s :pretty t :readably t))
+        "`(,?FOO)"))
+
+;;; bug reported by Paul Dietz on sbcl-devel: unquoted lambda lists
+;;; were leaking the SB-IMPL::BACKQ-COMMA implementation.
+(assert (equal
+        (with-output-to-string (s)
+          (write '`(foo ,x) :stream s :pretty t :readably t))
+        "`(FOO ,X)"))
+(assert (equal
+        (with-output-to-string (s)
+          (write '`(foo ,@x) :stream s :pretty t :readably t))
+        "`(FOO ,@X)"))
+#+nil ; '`(foo ,.x) => '`(foo ,@x) apparently. 
+(assert (equal
+        (with-output-to-string (s)
+          (write '`(foo ,.x) :stream s :pretty t :readably t))
+        "`(FOO ,.X)"))
+(assert (equal
+        (with-output-to-string (s)
+          (write '`(lambda ,x) :stream s :pretty t :readably t))
+        "`(LAMBDA ,X)"))
+(assert (equal
+        (with-output-to-string (s)
+          (write '`(lambda ,@x) :stream s :pretty t :readably t))
+        "`(LAMBDA ,@X)"))
+#+nil ; see above
+(assert (equal
+        (with-output-to-string (s)
+          (write '`(lambda ,.x) :stream s :pretty t :readably t))
+        "`(LAMBDA ,.X)"))
+(assert (equal
+        (with-output-to-string (s)
+          (write '`(lambda (,x)) :stream s :pretty t :readably t))
+        "`(LAMBDA (,X))"))
+\f
+;;; SET-PPRINT-DISPATCH should accept function name arguments
+(defun ppd-function-name (s o)
+  (print (length o) s))
+(set-pprint-dispatch '(cons (eql frob)) 'ppd-function-name)
+(let ((s (with-output-to-string (s)
+          (pprint '(frob a b) s))))
+  (assert (position #\3 s)))
+\f
 ;;; success
 (quit :unix-status 104)