anchor.diff:                                 &allow-other-keys)
                                    body
                      &environment env)
  -    (macrolet ((pop-arg (name &optional errorp)
  -                 (with-gensum (v default)
  -                   `(let ((,v (getf args ,name (quote ,default))))
  +    (macrolet ((pop-arg (kwd &optional defv)
  +                 (with-gensym (v default)
  +                   `(let ((,v (getf args ,kwd (quote ,default))))
                         (cond
                           ((eq ,v (quote ,default))
  -                         (cond
  -                           ;; FIXME: #I18N
  -                           (errorp (error "Required argument ~S not provided: ~<~S~>"
  -                                          ,name args))
  -                           (t (values nil nil))))
  -                        (t (multiple-value-prog1 (values ,v t)
  -                             (setf args (delf args ,name)))))))))
  -      (labels ((mk-kwd (a b)
  -                 (intern (format nil "~A-~A" a b)
  -                         (quote #:keyword)))
  -               (lambda-if (arg)
  -                 (let ((form-arg (mk-kwd arg (quote #:form)))
  -                       (fn-arg (mk-kwd art (quote #:function))))
  +                         (values ,defv nil))
  +                        (t
  +                         (multiple-value-prog1 (values ,v t)
  +                           (remf args ,kwd))))))))
  +      (labels ((mk-kwd (a b) (intern (format nil "~A-~A" a b)
  +                                     (quote #:keyword)))
  +               (args-if (arg)
                      (multiple-value-bind (form foundp)
                          (pop-arg arg)
                        (when foundp
  -                       (list form-arg form
  -                             fn-arg `(lambda () ,@form)))))))
  +                       (let ((form-arg (mk-kwd arg (quote #:form)))
  +                             (fn-arg (mk-kwd arg (quote #:function))))
  +                         (list form-arg form
  +                               fn-arg `(lambda () ,form)))))))
           (with-gensym (test)
  -          `(let ((,test (make-instance ,(pop-arg class t)
  -                                       ,@(lambda-if :setup)
  -                                       ,@(lambda-if :cleanup)
  +          `(let ((,test (make-instance ,(pop-arg :class class)
  +                                       ,@(args-if :setup)
  +                                       ,@(args-if :cleanup)
                                          ,@args
                                          :label (quote ,name)
  -                                       :environment ,env)))
  -             (register-test ,test)
  -             (vaules ,test))))))
  -
  -#+NIL
  -(deftest #:deftest-test ()
  -  (
  -))
  +                                       :environment ,env
  +                                       :body (quote ,body)
  +                                       :body-function
  +                                       (lambda () ,body)
  +                                       )))
  +             #+NIL (register-test ,test)
  +             (values ,test))))))
  +
  +#+NIL
  +(let ((foo-interface-active-p)
  +      (*break-on-signals* t))
  +;;  (macroexpand-1
  +;;   (quote
  +    (deftest #:deftest-test
  +        (:class 'diadic-predicate-test
  +                :setup (setq foo-interface-active-p t)
  +                :predicate (quote =)
  +                :e
  +                )
  +      (cond
  +        (foo-interface-active-p
  +         (expt 2 2))
  +        (t (quote #:fail)))))
  +;;   ))
   
   ;; test output
   
  
positive.code: ;; test application
  
  (defgeneric run-test (test &rest data &key &allow-other-keystest)
    (:method :around ((test test) &rest data &key &allow-other-keys)
             (declare (ignore data))
       (let ((pre-test-form (test-pre-test-form test)))
  
negative.code:     :accessor test-pre-test-form)
     (pre-test-function
      :type function
      :initarg :setup-function
      :initform nil
      :accessor test-pre-test-function)
  
  