X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fclos.impure.lisp;h=89fd5bb927e57dbe4b8499142f32d38d8cd9c6c1;hb=079ef9dad558ca07cb8178ef428bf738112174fa;hp=94b3dc5377ec84f3c434e96f94e4c7ff397df878;hpb=dbc2c0c3e6b3039171adabf2d4e9c373495624df;p=sbcl.git diff --git a/tests/clos.impure.lisp b/tests/clos.impure.lisp index 94b3dc5..89fd5bb 100644 --- a/tests/clos.impure.lisp +++ b/tests/clos.impure.lisp @@ -191,6 +191,7 @@ ((a-slot :initarg :a-slot :accessor a-slot) (b-slot :initarg :b-slot :accessor b-slot) (c-slot :initarg :c-slot :accessor c-slot))) + (let ((foo (make-instance 'class-with-slots :a-slot 1 :b-slot 2 @@ -292,8 +293,8 @@ (macrolet ((assert-program-error (form) `(multiple-value-bind (value error) (ignore-errors ,form) - (assert (null value)) - (assert (typep error 'program-error))))) + (unless (and (null value) (typep error 'program-error)) + (error "~S failed: ~S, ~S" ',form value error))))) (assert-program-error (defclass foo001 () (a b a))) (assert-program-error (defclass foo002 () (a b) @@ -831,6 +832,17 @@ (setf x (/ x 2)) x) (assert (= (fum 3) 3/2)) +(defmethod fii ((x fixnum)) + (declare (special x)) + (setf x (/ x 2)) + x) +(assert (= (fii 1) 1/2)) +(defvar *faa*) +(defmethod faa ((*faa* string-stream)) + (setq *faa* (make-broadcast-stream *faa*)) + (write-line "Break, you sucker!" *faa*) + 'ok) +(assert (eq 'ok (faa (make-string-output-stream)))) ;;; Bug reported by Zach Beane; incorrect return of (function ;;; ',fun-name) in defgeneric @@ -840,6 +852,55 @@ (defgeneric nonsense ()))))) 'generic-function)) +(assert + (typep (funcall (compile nil + '(lambda () (flet ((nonsense-2 () nil)) + (defgeneric nonsense-2 () + (:method () t)))))) + 'generic-function)) + +;;; bug reported by Bruno Haible: (setf find-class) using a +;;; forward-referenced class +(defclass fr-sub (fr-super) ()) +(setf (find-class 'fr-alt) (find-class 'fr-super)) +(assert (eq (find-class 'fr-alt) (find-class 'fr-super))) + + +;;; ANSI Figure 4-8: all defined classes. Check that we can define +;;; methods on all of these. +(progn + (defgeneric method-for-defined-classes (x)) + (dolist (c '(arithmetic-error + generic-function simple-error array hash-table + simple-type-error + bit-vector integer simple-warning + broadcast-stream list standard-class + built-in-class logical-pathname standard-generic-function + cell-error method standard-method + character method-combination standard-object + class null storage-condition + complex number stream + concatenated-stream package stream-error + condition package-error string + cons parse-error string-stream + control-error pathname structure-class + division-by-zero print-not-readable structure-object + echo-stream program-error style-warning + end-of-file random-state symbol + error ratio synonym-stream + file-error rational t + file-stream reader-error two-way-stream + float readtable type-error + floating-point-inexact real unbound-slot + floating-point-invalid-operation restart unbound-variable + floating-point-overflow sequence undefined-function + floating-point-underflow serious-condition vector + function simple-condition warning)) + (eval `(defmethod method-for-defined-classes ((x ,c)) (princ x)))) + (assert (string= (with-output-to-string (*standard-output*) + (method-for-defined-classes #\3)) + "3"))) + ;;;; success (sb-ext:quit :unix-status 104)