(include "/usr/local/var/mlisp/terminal.lsp") (defun ut::assert-equal (expected form) (do (define returned (eval form)) (if (= expected returned) (list #t expected returned) (list nil expected returned)) )) (defun ut::assert-true (test) (ut::assert-equal #t test)) (defun ut::assert-false (test) (ut::assert-equal nil test)) (defun ut::assert-nil (test) (ut::assert-false test)) (defun ut::define-test (name exp_list) (set! ut::tests_list (push ut::tests_list (list name exp_list)))) (defun ut::exec-test (test_name code) (do (define test_result (eval code)) (if (first test_result) (do (print (+ (term-green "OK") " -> " test_name)) #t ) (do (print (+ (term-red "ERR") " -> " test_name)) (print " " (second test_result) " <> " (third test_result)) nil )) )) (defun ut::run-test (name) (for t ut::tests_list (if (= (first t) name) (ut::exec-test (first t) (second t))) )) (defun ut::run-tests () (do (define oks 0) (define errs 0) (for t ut::tests_list (if (ut::exec-test (first t) (second t)) (set! oks (+ oks 1)) (set! errs (+ errs 1)) ) ) (if (= errs 0) (print (term-green (+ (string oks) " test(s) OK"))) (print (term-red (+ (string errs) " test(s) FAILED")))) )) (define ut::tests_list '()) ;; example of usage ;; (ut::define-test "its number 2" '(ut::assert-equal 2 (+ 1 1))) ;; (ut::define-test "tis number 3" '(ut::assert-equal 3 (+ 1 1))) ;; (ut::run-tests)