Simpler printer
[jscl.git] / tests / print.lisp
index 8d58c3c..c159e56 100644 (file)
         (and (symbolp x) (equal (symbol-name x) "1E+2"))))
 (test (let ((x (read-from-string (prin1-to-string '1E+))))
         (and (symbolp x) (equal (symbol-name x) "1E+"))))
+
+
+
+;;; Printing strings
+(test (string= "\"foobar\"" (write-to-string "foobar")))
+(test (string= "\"foo\\\"bar\"" (write-to-string "foo\"bar")))
+
+;;; Printing vectors
+(test (string= "#()" (write-to-string #())))
+(test (string= "#(1)" (write-to-string #(1))))
+(test (string= "#(1 2 3)" (write-to-string #(1 2 3))))
+
+;;; Lists
+(test (string= "NIL" (write-to-string '())))
+(test (string= "(1)" (write-to-string '(1))))
+(test (string= "(1 2 3)" (write-to-string '(1 2 3))))
+(test (string= "(1 2 . 3)" (write-to-string '(1 2 . 3))))
+(test (string= "(1 2 3)" (write-to-string '(1 2 3))))
+(test (string= "((1 . 2) 3)" (write-to-string '((1 . 2) 3))))
+(test (string= "((1) 3)" (write-to-string '((1) 3))))
+
+;;; Circular printing
+(let ((vector #(1 2 nil)))
+  (setf (aref vector 2) vector)
+  (test (string= "#1=#(1 2 #1#)"
+                 (let ((*print-circle* t))
+                   (write-to-string vector)))))
+
+(let ((list '(1)))
+  (setf (cdr list) list)
+  (test (string= "#1=(1 . #1#)"
+                 (let ((*print-circle* t))
+                   (write-to-string list)))))
+
+