Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defmacro test (name &body tests)
  (let ((check (lambda (test)
                 (let* ((op (car test))
                        (args (cdr test))
                        (defs (map (lambda (x)
                                     `(,(gensym) ,x))
                                   args))
                        (vars (map head defs)))
                   `(let ,defs
                      (unless (,op ,@vars)
                        (list :fail ',test (list ,op ,@vars))))))))
    `(defun ,(concat-symbols 'tests/ name) ()
       (or (or ,@(map check tests))
           '(:pass)))))