nltests.lsp
Code: Select all
;; nltests.lsp -- testing macros
;; Copyright (C) 2007 Samuel Fredrickson.
(context 'nltests)
; used to report which tests and sub-tests failed.
(setq *test-name* '())
; set to true if you want tests to report which tests failed
(setq *report-failures* true)
; set to true if you want tests to report which tests passed
(setq *report-passes* nil)
; prints a failure if allowed
(define (report-failure test)
(if *report-failures*
(println *test-name* ": " test " FAILED!"))
nil)
; prints a pass if allowed
(define (report-pass test)
(if *report-passes*
(println *test-name* ": " test " passed"))
true)
; reports the status of a test.
(define (report test)
(if (eval test)
(report-pass test)
(report-failure test)))
; tests tests, returns nil on fail and true on pass.
(define-macro (check tests)
(apply and (map report tests)))
(context 'MAIN)
; defines a new test.
(define-macro (define-test params)
(eval (expand
'(define params
(let ((nltests:*test-name* (append nltests:*test-name* '(_name))))
(nltests:check tests)))
(list
(list 'params params)
(list '_name (params 0))
(list 'tests (args))))))
Code: Select all
(load "nltests.lsp")
(define-test (test-+)
(= (+ 5 9) 14)
(= (+ 4 3) 7))
(define-test (test-*)
(= (* 4 5) 20)
(= (* 3 2) 6))
(define-test (test-math)
(test-+)
(test-*))
Hope you find this useful.