(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"))
(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"))
)