50 lines
2.1 KiB
Common Lisp
Executable File
50 lines
2.1 KiB
Common Lisp
Executable File
;; Mutation cons.
|
|
(let ((tests nil))
|
|
(defmacro deftest (module test expected)
|
|
(if (not (assoc module tests))
|
|
(setf tests (cons `(,module . ()) tests)))
|
|
(let ((mod-tests (assoc module tests)))
|
|
(setf (cdr mod-tests)
|
|
(cons (cons test expected)
|
|
(cdr mod-tests))))
|
|
nil)
|
|
(defmacro run-test (&rest modules)
|
|
(let ((failures 0)
|
|
(modules (if (eq T (car modules))
|
|
(mapcar #'car tests)
|
|
modules)))
|
|
(if (every (lambda (mod)
|
|
(if (member (car mod) modules)
|
|
(progn
|
|
(format t "Module ~w :~&" (car mod))
|
|
(mapcar (lambda (test)
|
|
(let* ((res (eval (car test)))
|
|
(expect (eval (cdr test))))
|
|
(if (equal expect res)
|
|
(format t " [SUCCESS] ~w~&" (car test))
|
|
(progn (format t " [FAILURE] Test : ~w~& got : ~w~& expected : ~w~&" (car test) res expect)
|
|
(setf failures (+ failures 1))))))
|
|
(reverse (cdr mod)))))
|
|
(if (not (= failures 0))
|
|
(format t "Module ~w failed ~w tests. Stopping.~&" (car mod) failures))
|
|
(= failures 0))
|
|
tests)
|
|
(progn (format t "All modules passed all tests successfully.~&")
|
|
t)
|
|
nil)))
|
|
(defun show-test ()
|
|
tests))
|
|
|
|
;; Test de debugage du test unitaire
|
|
;(deftest environnement nil nil)
|
|
;(deftest environnement (eq 42 42) T) ;; Test qui fail
|
|
;(deftest vm T T)
|
|
;(deftest environnement2 (eq 42 42) nil)
|
|
;(show-test)
|
|
;(run-test environnement)
|
|
;; TODO : every ne mappe pas la liste dans le bon ordre, et vm est
|
|
;; exécuté avant environnement quel que soit l'ordre des paramètres.
|
|
;(run-test environnement vm)
|
|
;(run-test environnement vm environnement2)
|
|
;(run-test t) ;; t => tous
|