(define-syntax test
(syntax-rules ()
((_ expr expected)
(list 'expr (lambda () expr) expected))))
(define (run-test t)
(write (car t))
(let ((result ((cadr t))))
(if (equal? result (caddr t))
(begin (display " ok") (newline) #t)
(begin (display " FAIL") (newline)
(display " Expected: ") (write (caddr t)) (newline)
(display " Returned: ") (write result) (newline)
#f))))
(define (run-tests tests)
(let loop ((ts tests) (all-ok #t))
(if (null? ts)
all-ok
(let ((r (run-test (car ts))))
(loop (cdr ts) (and all-ok r))))))