mirror of
https://github.com/janet-lang/janet
synced 2024-11-28 11:09:54 +00:00
7d57f87007
This turns splices that are ignored into compiler errors. Other alternatives here should also be considered, for example making this a compiler warning rather than an error. For example, the latest spork as of a3ee63c137ee3234987dbbca71b566994ff8ae8c has an error of this kind, but the resulting program does work correctly. Also disallow splice propagation - code of the form (+ 1 (do ;[2 3 4]) 5).
47 lines
1.3 KiB
Plaintext
47 lines
1.3 KiB
Plaintext
# Helper code for running tests
|
|
|
|
(var num-tests-passed 0)
|
|
(var num-tests-run 0)
|
|
(var suite-num 0)
|
|
(var start-time 0)
|
|
|
|
(def is-verbose (os/getenv "VERBOSE"))
|
|
|
|
(defn assert
|
|
"Override's the default assert with some nice error handling."
|
|
[x &opt e]
|
|
(default e "assert error")
|
|
(++ num-tests-run)
|
|
(when x (++ num-tests-passed))
|
|
(def str (string e))
|
|
(if x
|
|
(when is-verbose (eprintf "\e[32m✔\e[0m %s: %v" (describe e) x))
|
|
(eprintf "\e[31m✘\e[0m %s: %v" (describe e) x))
|
|
x)
|
|
|
|
(defmacro assert-error
|
|
[msg & forms]
|
|
(def errsym (keyword (gensym)))
|
|
~(assert (= ,errsym (try (do ,;forms) ([_] ,errsym))) ,msg))
|
|
|
|
(defn check-compile-error
|
|
[form]
|
|
(def result (compile form))
|
|
(assert (table? result) (string/format "expected compilation error for %j, but compiled without error" form)))
|
|
|
|
(defmacro assert-no-error
|
|
[msg & forms]
|
|
(def errsym (keyword (gensym)))
|
|
~(assert (not= ,errsym (try (do ,;forms) ([_] ,errsym))) ,msg))
|
|
|
|
(defn start-suite [x]
|
|
(set suite-num x)
|
|
(set start-time (os/clock))
|
|
(eprint "Starting suite " x "..."))
|
|
|
|
(defn end-suite []
|
|
(def delta (- (os/clock) start-time))
|
|
(eprinf "Finished suite %d in %.3f seconds - " suite-num delta)
|
|
(eprint num-tests-passed " of " num-tests-run " tests passed.")
|
|
(if (not= num-tests-passed num-tests-run) (os/exit 1)))
|