Folded prerequisites

marick edited this page Feb 20, 2013 · 8 revisions

A note on checkers

Checkers can be used as both expected values of assertions and also in the argument lists of prerequisites:

    (fact
      (f 1) => truthy   ; as expected value of assertion
      (provided 
         (g truthy) => 3))   ; as argument of prerequisite

Some checkers, like roughly, are actually functions that generate checking functions:

    (fact
      (f 1) => (exactly odd?)
      (provided
         (g (roughly 3.0)) => 800.0))

How does Midje know that (g (roughly ...)) is a checker, not a prerequisite to be folded? It is defined specially:

     (defchecker roughly
       "With two arguments, accepts a value within delta of the
        expected value. With one argument, the delta is 1/1000th
        of the expected value."
       ([expected delta]
         (checker [actual]  ; <<= Checker tags the generated function as a checker.
           (and (>= expected (- actual delta))
                (<= expected (+ actual delta)))))
       ([expected]
         (roughly expected (* 0.001 expected))))

If you define your own function-generating checkers, they should use similar macros. See Checkers within prerequisites.

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.