;;;; absolutely no warranty. See the COPYING and CREDITS files for
;;;; more information.
-(cl:in-package :cl-user)
+(cl:defpackage "ASSERTOID"
+ (:use "CL")
+ (:export "GRAB-CONDITION" "RAISES-ERROR?" "ASSERTOID"))
+
+(cl:in-package "ASSERTOID")
+
+(defmacro grab-condition (&body body)
+ `(nth-value 1
+ (ignore-errors ,@body)))
+
+(defmacro raises-error? (form &optional (error-subtype-spec 'error))
+ `(typep (nth-value 1 (ignore-errors ,form)) ',error-subtype-spec))
;;; EXPR is an expression to evaluate (both with EVAL and with
;;; COMPILE/FUNCALL). EXTRA-OPTIMIZATIONS is a list of lists of
;;; LAMBDA. EXPECTED-EQL, EXPECTED-EQUAL, and EXPECTED-EQUALP are
;;; shorthand for special cases of EXPECTED-LAMBDA.
;;;
-;;; Use EXPECTED-ERROR to require an error to be thrown. Use
-;;; EXPECTED-ERROR-LAMBDA to require that an error be thrown and
+;;; Use EXPECTED-ERROR to require an error to be signalled. Use
+;;; EXPECTED-ERROR-LAMBDA to require that an error be signalled and
;;; that further it satisfies the given lambda.
(defmacro assertoid (expr
&key
(flet ((frob (evaloid)
(let ((result (funcall evaloid expr)))
(unless (funcall eval-expected-lambda result)
- (error "failed assertoid" expr))))
+ (error "failed assertoid ~S" expr))))
(compile-as-evaloid (optimizations)
(lambda (expr)
(funcall (compile nil