X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=docs%2Fmanual.txt;h=69e538b72c08cfcb931e9a6bc86759d718ae41d1;hb=b6625f7c5400204302435b83998b348fe24e886c;hp=8d4ed3f019ac2516089cf00e2600c29993b13ee4;hpb=526421d21a514dfbd190ae5956cbbb95035c0dc2;p=fiveam.git diff --git a/docs/manual.txt b/docs/manual.txt index 8d4ed3f..69e538b 100644 --- a/docs/manual.txt +++ b/docs/manual.txt @@ -18,7 +18,6 @@ Fall/Winter 2012 | (xref:OP_IS[`is`] (`PREDICATE` `EXPECTED` `ACTUAL`)) | check that, according to `PREDICATE` our `ACTUAL` is the same as our `EXPECTED` | (xref:OP_IS[`is-true`] VALUE) | check that a value is non-NIL | (xref:OP_RUN![`run!`] TEST-NAME) | run one (or more) tests and print the results -| (xref:OP_RUN![`!`]) | rerun the most recently run test. |================================ See the xref:API_REFERENCE[api] for details. @@ -53,7 +52,7 @@ Did 2 checks. Lather, rinse, repeat: -------------------------------- -CL-USER> (!) +CL-USER> (run!) .. Did 2 checks. Pass: 2 (100%) @@ -355,19 +354,6 @@ If you want to run a specific test: Where `TEST-NAME` is either a test object (as returned by `get-test`) or a symbol naming a single test or a test suite. -=== Re-running Tests === - -The `run!` function stores its arguments in a set of variables and, -via the functions `!`, `!!` and `!!!` will rerun those named -tests. Note that we're deliberatly talking about names, and not test -objects, `!` will take the last argument passed to `run!` and call -`run!` with that again, looking up the test again if the argument was -a symbol. - -This ensures that `!` will always run the current definition of a -test, even if the test has been redefined since the last time `run!` -was called. - === Running Tests at Test Definition Time === Often enough, especially when fixing regression bugs, we'll always @@ -377,12 +363,6 @@ def-test form we'll call `run!` on the name of the test. For obvious reasons you have to set this variable manually after having loaded your test suite. -[NOTE] -Setting `*run-test-when-defined*` will cause `run!` to get called far -more often than normal. `!` and `!!` and `!!!` don't know that they're -getting called semi-automatically and will therefore tend to all -reduce to the same test (which still isn't totally useless behaviour). - === Debugging failures and errors === `*debug-on-error*`:: @@ -423,9 +403,36 @@ yourself: == Random Testing (QuickCheck) == -TODO. +Sometimes it's hard to come up with edge cases for tests, or sometimes +there are so many that it's hard to list them all one by one. Random +testing is a way to tell the test suite how to generate input and how +to test that certain conditions always hold. One issue when writing +random tests is that you can't, usually, test for specific results, +you have to test that certain relationships hold. + +For example, if we had a function which reverses a list, we could +define a relationship like this: + +-------------------------------- +(equalp the-list (reverse (reverse the-list))) +-------------------------------- + +or -Every FiveAM test can be a random test, just use the for-all macro. +-------------------------------- +(equalp (length the-list) (length (reverse the-list))) +-------------------------------- + +Random tests are defined via `def-test`, but the random part is then +wrapped in a xref:OP_FOR-ALL[`for-all`] macro which runs its body +`*num-trials*` times with different inputs: + +-------------------------------- +(for-all ((the-list (gen-list :length (gen-integer :min 0 :max 37) + :elements (gen-integer :min -10 :max 10)))) + (is (equalp a (reverse (reverse the-list)))) + (is (= (length the-list) (length (reverse the-list))))) +-------------------------------- == Fixtures == @@ -663,32 +670,6 @@ include::docstrings/OP_DEBUG-EPOINT-.txt[] include::docstrings/OP_RUN.txt[] ================================ -=== ! / !! / !!! === - -================================ ----- -(!) ----- - -include::docstrings/OP_-EPOINT-.txt[] -================================ - -================================ ----- -(!!) ----- - -include::docstrings/OP_-EPOINT--EPOINT-.txt[] -================================ - -================================ ----- -(!!!) ----- - -include::docstrings/OP_-EPOINT--EPOINT--EPOINT-.txt[] -================================ - [[OP_DEF-FIXTURE]] === DEF-FIXTURE ===