64 lines
1.5 KiB
Racket
64 lines
1.5 KiB
Racket
|
|
;; GRacket automatic testing basic functions and macros
|
|
|
|
(require mzlib/class)
|
|
|
|
(define SECTION #t)
|
|
|
|
(define errs null)
|
|
(define test-count 0)
|
|
|
|
(define (test expect name got)
|
|
(set! test-count (add1 test-count))
|
|
(unless (equal? expect got)
|
|
(let ([s (format "~a: expected ~e; got ~e" name expect got)])
|
|
(fprintf (current-error-port) "ERROR: ~a\n" s)
|
|
(set! errs (cons s errs)))))
|
|
|
|
(define-syntax mismatch
|
|
(lambda (stx)
|
|
(syntax-case stx ()
|
|
[(_ expr)
|
|
(syntax
|
|
(test 'was-mismatch 'mismtach
|
|
(with-handlers ([exn:fail:contract?
|
|
(lambda (x)
|
|
(printf "~a\n" (exn-message x))
|
|
'was-mismatch)]
|
|
[exn:fail? values])
|
|
expr)))])))
|
|
|
|
(define-syntax st
|
|
(lambda (stx)
|
|
(syntax-case stx ()
|
|
[(_ val obj method . args)
|
|
(syntax
|
|
(test val 'method (send obj method . args)))])))
|
|
|
|
(define-syntax stv
|
|
(lambda (stx)
|
|
(syntax-case stx ()
|
|
[(_ . args)
|
|
(syntax (st (void) . args))])))
|
|
|
|
(define-syntax stvals
|
|
(lambda (stx)
|
|
(syntax-case stx ()
|
|
[(_ vals obj method . args)
|
|
(syntax
|
|
(test vals 'method (call-with-values (lambda () (send obj method . args)) list)))])))
|
|
|
|
(define (report-errs)
|
|
(flush-output)
|
|
(sleep 1)
|
|
(newline)
|
|
(if (null? errs)
|
|
(printf "Passed all ~a tests\n" test-count)
|
|
(begin
|
|
(fprintf (current-error-port) "~a Error(s) in ~a tests\n" (length errs) test-count)
|
|
(for-each
|
|
(lambda (s)
|
|
(fprintf (current-error-port) "~a\n" s))
|
|
(reverse errs)))))
|
|
|