doc.txt

check-values

_check-values_
_check-values.plt_
_test_
_values_
_schemeunit_

Version 1.1
Richard Cobbe
January 2007
<cobbe at ccs dot neu dot edu>

This software is distributed under a BSD-style license (see license.txt).

This package provides two files, _check-values.ss_ and
_check-values-tests.ss_.  The former defines two macros, which make it
easier to write SchemeUnit test cases for functions and other forms that
return multiple values.

The second file defines a SchemeUnit test suite for the macros in
check-values.ss.  Note that most of these test cases are *SUPPOSED* to
fail; I'm interested primarily in ensuring that the message is formatted
correctly in case of failure.  These test cases may also be useful examples
of how to use the two macros.

======================================================================

Provided Forms:

> (check-values actual ((same? expected) ...) [msg])

This macro checks an expression that produces multiple values.  The first
argument, actual, is the expression to be tested.  Unlike the other checks
in SchemeUnit, this is a macro, and you should *NOT* wrap actual in a
thunk!  The sequence of (same? expected) lists specify the values that
actual should produce, along with the predicate to be used to compare the
two.

The check

    (check-values actual ((same_1 expected_1) ... (same_n expected_n)))

succeeds if actual produces values v_1 through v_n and if

    (check same_i v_i expected_i)

succeeds for all i between 1 and n.

As with other SchemeUnit checks, this form accepts an optional message
argument.

If the check fails, it fails with a message that contains the original
message, if any, and indicate the cause of the error: if actual produced
the wrong number of values, or which produced value failed to match the
corresponding expected value.

For example,

    (check-values (quotient/remainder 5 2) ([= 2] [= 1]))

should succeed, and

    (check-values (quotient/remainder 5 2) ([= 2]))

will fail with a message indicating that the test case expected 1 value but
got 2.

> (check-values* same? actual (expected ...) [msg])

This macro is an optimization of check-values for the case in which all
values are to be compared with the same equality predicate.

    (check-values* EQ EXPR (V1 ...))

expands (roughly) to

    (check-values EXPR ((EQ V1) ...))

You'd write the two examples above with check-values as follows:

    (check-values = (quotient/remainder 5 2) (2 1))
    (check-values = (quotient/remainder 5 2) (2))

======================================================================

TODO:

  1) Right now, I have to run the test cases by hand and look at the
     resulting messages to make sure they're formatted correctly.  Is it
     possible to write a meta-test-case that would automate this process?

  2) The backtrace in the GUI isn't very helpful; it shows only the call to
     test/graphical-ui.  (This might be because of .zo compilation.)


======================================================================

CHANGES:

  * since version 1.0:

    - documented test cases
    - added keywords, CHANGES, TODO, usage examples to doc.txt
    - fixed bug in calls to raise-syntax-error

======================================================================

ACKNOWLEDGMENTS:

Carl Eastlund suggested (and I think implemented the initial draft of) the
generalization from check-values* to check-values.