X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Finterface.pure.lisp;h=a9b39e39505fa9ab445ef06d8e98c35c1813d300;hb=592ecf78ec904eea390ca67dbacf00d486276c58;hp=c84cc6343379a6ceed282a839a1e3866f190b5a8;hpb=e92a2f8844d9125e76a4b96dc27b56632bfd85b6;p=sbcl.git diff --git a/tests/interface.pure.lisp b/tests/interface.pure.lisp index c84cc63..a9b39e3 100644 --- a/tests/interface.pure.lisp +++ b/tests/interface.pure.lisp @@ -42,6 +42,49 @@ (describe #(1 2 3)) (describe #2a((1 2) (3 4))) +;;; support for DESCRIBE tests +(defstruct to-be-described a b) +(defclass forward-describe-class (forward-describe-ref) (a)) + +;;; DESCRIBE should run without signalling an error. +(describe (make-to-be-described)) +(describe 12) +(describe "a string") +(describe 'symbolism) +(describe (find-package :cl)) +(describe '(a list)) +(describe #(a vector)) + +;;; The DESCRIBE-OBJECT methods for built-in CL stuff should do +;;; FRESH-LINE and TERPRI neatly. +(dolist (i (list (make-to-be-described :a 14) 12 "a string" + #0a0 #(1 2 3) #2a((1 2) (3 4)) 'sym :keyword + (find-package :keyword) (list 1 2 3) + nil (cons 1 2) (make-hash-table) + (let ((h (make-hash-table))) + (setf (gethash 10 h) 100 + (gethash 11 h) 121) + h) + (make-condition 'simple-error) + (make-condition 'simple-error :format-control "fc") + #'car #'make-to-be-described (lambda (x) (+ x 11)) + (constantly 'foo) #'(setf to-be-described-a) + #'describe-object (find-class 'to-be-described) + (find-class 'forward-describe-class) + (find-class 'forward-describe-ref) (find-class 'cons))) + (let ((s (with-output-to-string (s) + (write-char #\x s) + (describe i s)))) + (unless (and (char= #\x (char s 0)) + ;; one leading #\NEWLINE from FRESH-LINE or the like, no more + (char= #\newline (char s 1)) + (char/= #\newline (char s 2)) + ;; one trailing #\NEWLINE from TERPRI or the like, no more + (let ((n (length s))) + (and (char= #\newline (char s (- n 1))) + (char/= #\newline (char s (- n 2)))))) + (error "misbehavior in DESCRIBE of ~S" i)))) + ;;; TYPEP, SUBTYPEP, UPGRADED-ARRAY-ELEMENT-TYPE and ;;; UPGRADED-COMPLEX-PART-TYPE should be able to deal with NIL as an ;;; environment argument @@ -55,3 +98,14 @@ ;;; DECLARE should not be a special operator (assert (not (special-operator-p 'declare))) + +;;; WITH-TIMEOUT should accept more than one form in its body. +(handler-bind ((sb-ext:timeout #'continue)) + (sb-ext:with-timeout 3 + (sleep 2) + (sleep 2))) + +;;; DOCUMENTATION should return nil, not signal slot-unbound +(documentation 'fixnum 'type) +(documentation 'class 'type) +(documentation (find-class 'class) 'type)