George, Matthias's suggestion to have students use one of the teaching languages is generally a good idea.

For experienced programmers and software test engineers, however, there are a number of different test engines available. Below is your program using the Overeasy test engine, which I like better than current RackUnit. More info is at "http://www.neilvandyke.org/overeasy/";. It's currently in the middle of changes, which is why the documentation doesn't talk about this convention of putting tests inline with "(module+ test ...)", and how it now uses the logger and error facilities, rather than text reports.

Neil V.

#lang racket/base

(module+ test
  (require (planet neil/overeasy:3)))

(provide sum-coins)
(define (sum-coins pennies nickels dimes quarters)
(cond [(negative? pennies) (raise-argument-error 'sum-coins "negative?" 0 pennies)])
  (+ pennies (* 5 nickels) (* 10 dimes) (* 25 quarters)))

(module+ test

  (test #:id   'negative-coin-with-exn-string
        #:code (sum-coins -1 3 5 7)
#:exn "sum-coins: contract violation\n expected: negative?\n given: -1")

  (test #:id   'negative-coin-with-exn-regexp
        #:code (sum-coins -1 3 5 7)
        #:exn  #rx"negative")

  (test #:id   'negative-coin-with-exn-predicate
        #:code (sum-coins -1 3 5 7)
        #:exn  exn:fail:contract?)

  (test 'all-zeroes
        (sum-coins 0 0 0 0)
        0)

  (test 'all-ones
        (sum-coins 1 1 1 1)
        41)

  (test 'barf-test
        (sum-coins 1 1 1 1)
        42))

____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to