;; Little helper functions and macros for the run tests (use-modules (ice-9 format)) (define (test-error error-format . args) (display "Runtime check failed. ") (apply format #t error-format args) (newline) (exit 1)) (define-macro (expect-true form) `(if (not ,form) (test-error "Expected true value of ~A" ',form))) (define-macro (expect-false form) `(if ,form (test-error "Expected false value of ~A" ',form))) (define-macro (expect-result expected-result-form equal? form) `(let ((expected-result ,expected-result-form) (result ,form)) (if (not (,equal? result expected-result)) (test-error "The result of ~A was ~A, expected ~A, which is not ~A" ',form result expected-result ',equal?)))) (define-macro (expect-throw tag-form form) `(let ((tag ,tag-form)) (if (catch #t (lambda () ,form #t) (lambda (key . args) (if (eq? key ,tag-form) #f (test-error "The form ~A threw to ~A (expected a throw to ~A)" ',form key tag)))) (test-error "The form ~A returned normally (expected a throw to ~A)"))))