On 12-Aug-07, at 11:55 AM, andrew cooke wrote:
I can't seem to find a Snow library for unit tests.
The test framework is integrated into Snow. It is not a separate package. You need to use the test* and expect* forms. Here is the documentation from the Snow documentation page: test* and expect* forms
The test* form can be used to include self test code within the package body. The definitions and expressions inside test* forms are normally ignored. However, test* forms are transformed into begin forms when they are activated in a Snow framework implementation specific way (for example the SNOW_TEST environment variable of the generic Snow framework implementation).
The expect* form can only appear inside test* forms. The expect* form takes a single argument, an expression whose value is expected to be non-false. The test is said to have failed when the expression evaluates to #f or an exception is raised. The result of the self tests (number of failed tests, etc) is reported in a system dependent way.
For example:
(package* math/v1.0.0 (provide: (define (square x))))
(define (square x) (* x x))
(test* (define (dec n) (- n 1)) (expect* (= 100 (square 10))) (expect* (= 81 (square (dec 10)))))
Script syntax
The generic Snow can be used to write scripts. A script has the same syntax as a package, except the first line is a shell command which executes the program "snow". Here's the source code of a minimal script, which is stored in the file "go.scm":
":";exec snow -- "$0" "$@"
(package* go/v1.0.0 (require: hostos/v1) (require: fixnum/v1))
(define (double x) (snow-fxarithmetic-shift-left x 1))
(test* (expect* (= 8 (double 4))))
(write (double (string->number (cadr (snow-command-line))))) (newline) Scripts are normally executed with the host Scheme system which was configured when the generic Snow implementation was installed. This can be changed by setting the SNOW_HOST environment variable to the name of the required host Scheme system (i.e. bigloo, chez, chicken, gambit, etc). The special name all will execute the script with all the installed Scheme systems. This is useful for testing the portability of a package. The environment variable SNOW_TEST can be set to the name(s) of the package(s) whose self tests must be executed. The environment variable SNOW_DEBUG when set to 1 will cause some debugging information to be output. For example:
% chmod +x go.scm % ./go.scm 500 1000 % SNOW_HOST=mzscheme ./go.scm 500 1000 % SNOW_HOST=all ./go.scm 500 ------------------------------------------------------------ bigloo 1000 ------------------------------------------------------------ chicken 1000 ------------------------------------------------------------ gambit 1000 ------------------------------------------------------------ mzscheme 1000 ------------------------------------------------------------ petite 1000 ------------------------------------------------------------ scm 1000 ------------------------------------------------------------ scsh 1000 ------------------------------------------------------------ stklos 1000 % SNOW_TEST="fixnum go" SNOW_HOST=mzscheme ./go.scm 500 1000 *** SNOW TESTS: passed all 7 tests.
Marc