roman-test.ss
(module roman-test mzscheme
  
  (require "roman.ss")
  (require (planet "test.ss" ("schematics" "schemeunit.plt" 2 8)))
  (require (planet "text-ui.ss" ("schematics" "schemeunit.plt" 2 8)))

  (define (get-incr b)
    (let ((retval (unbox b)))
      (set-box! b (add1 retval))
      retval))
  
  (define-syntax define-tests
    (syntax-rules () 
      ((define-tests test-name (test expected) ...)
       (begin (define c (box 1))
              (define test-name
                (test-suite (symbol->string 'test-name)
                            (test-equal? (string-append (symbol->string 'test-name) 
                                                        "-"
                                                        (number->string (get-incr c)))
                                         test
                                         expected)
                            ...))))))
                                         
  (define-tests summa-tests
    ((summa "V" "XV") "XX")
    ((summa "V" "XV" "X") "XXX")
    ((summa "I" "I" "I" "I" "I" "I" "I" "I" "I") "IX"))
    
  ;; to run these, evalulate
  ;;    (test/text-ui summa-tests)

  (define-tests productum-tests
    ((productum "V" "XV") "LXXV")
    ((productum "X" "X" "X") "M")
    ((productum "I" "I" "I" "I" "I" "I" "I" "I" "I") "I"))

  (define-tests differentia-tests
    ((differentia "V" "I") "IV")
    ((differentia "V" "II") "III")
    ((differentia "X" "VI") "IV"))
  
  (define-tests quotiens-tests
    ((quotiens "XX" "II") "X")
    ((quotiens "XX" "III") "VI")
    ((quotiens "XX" "IV") "V"))
  
  (define-tests residuum-tests
    ((residuum "XX" "III") "II")
    ((residuum "XX" "XIX") "I")
    ((residuum "C" "XCIII") "VII"))

  )