(defmacro are (expectations form &optional description &rest format-args) `(eval-in-context *context* (make-instance 'comparison-result :expression '(are ,expectations ,form) :value-form ',form :body (lambda () (multiple-value-list ,form)) :expected ',(mapcar #'second expectations) :comparison (lambda (a b) (and ,@(mapcar (lambda (expectation) (list (first expectation) `(pop a) `(pop b))) expectations))) ,@(when description `(:description (format nil ,description ,@format-args))))))