I can't seem to find a Snow library for unit tests.
I'm new to Scheme (work with Java although I have non-paid experience with a bunch of functional languages), so I'm a bit lost.
- is this just because Snow is new? - are unit tests not that common in the Scheme world? (context: in Java they are pretty much de rigeur) - is there some other way of doing tests?
I googled for "scheme unit tests" but didn't find anything that looked like "the" standard library. Am I expecting too much in the way of canonical libraries?
Sorry for all the questions - trying to get oriented.
Thanks, Andrew
PS Using Gambit with Emacs, if that makes any difference.
Afficher les réponses par date
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
Thanks for the help (and my apologies for not reading the existing docs carefully enough).
Now that I see things more clearly, I've written some introductory blurb and posted it at http://www.acooke.org/cute/GettingSta0.html in case it would help others.
Cheers, Andrew
On 12-Aug-07, at 8:18 PM, andrew cooke wrote:
Thanks for the help (and my apologies for not reading the existing docs carefully enough).
I'm glad you find Snow satisfies your needs (for now at least).
Now that I see things more clearly, I've written some introductory blurb and posted it at http://www.acooke.org/cute/GettingSta0.html in case it would help others.
That's a nice write-up. Snow certainly needs more publicity and this will help!
Marc
snow-users-list@iro.umontreal.ca