summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/012/lambda.tl5
-rw-r--r--tests/common.tl69
2 files changed, 51 insertions, 23 deletions
diff --git a/tests/012/lambda.tl b/tests/012/lambda.tl
index 408ea939..2ddca48f 100644
--- a/tests/012/lambda.tl
+++ b/tests/012/lambda.tl
@@ -86,3 +86,8 @@
(mtest
[(lambda (x y : (a 3) (b 4)) (list x y a b)) . vl] (a b c d)
[(lambda (x y : (a 3) (b 4)) (list x y a b)) 1 . vl] :error)
+
+(cond
+ (*compile-test* (exit t))
+ (t (set *compile-test* t)
+ (load (base-name *load-path*))))
diff --git a/tests/common.tl b/tests/common.tl
index b9e46ad3..b94960cf 100644
--- a/tests/common.tl
+++ b/tests/common.tl
@@ -1,31 +1,54 @@
+(defvar *compile-test*)
+
(defmacro error-to-sym (expr)
- ^(catch ,expr
- (error (cond) :error)
- (warning (cond) :warning)))
+ ^(catch ,expr
+ (error (cond) :error)
+ (warning (cond) :warning)))
(defmacro vtest (:env env expr expected)
(if-match (quote @(as sym @(or :error :warning))) expected
(set expected sym))
- (if (mequal expected :error :warning :warnerror)
- (catch
- (let ((expr-expn (expand expr env)))
- ^(ifa (not (equal (error-to-sym ,expr-expn) ,expected))
- (error "test case ~s failed: produced ~s; expected ~s"
- ',expr it ,expected)))
- (error (exc)
- (if (eq expected :warning)
- (error "test case ~s produced error during expansion, expected ~s"
- expr expected)))
- (warning (exc)
- (if (eq expected :error)
- (error "test case ~s warned during expansion, expected ~s"
- expr expected))))
- (let ((expr-expn (expand expr env))
- (expval (gensym)))
- ^(let ((,expval ,expected))
- (ifa (not (equal ,expr-expn ,expval))
- (error "test case ~s failed: produced ~s; expected ~s"
- ',expr it ,expval))))))
+ (if *compile-test*
+ (if (meq expected :error :warning)
+ (with-gensyms (code)
+ ^(let ((,code (catch
+ (compile-toplevel ',expr)
+ (error (exc)
+ (if (eq ,expected :warning)
+ (error "test case ~s produced error during compilation, expected ~s"
+ ',expr ,expected)))
+ (warning (exc)
+ (if (eq ,expected :error)
+ (error "test case ~s warned during compilation, expected ~s"
+ ',expr ,expected))))))
+ (ifa (not (equal (error-to-sym (call ,code)) ,expected))
+ (error "test case ~s failed: produced ~s; expected ~s"
+ ',expr it ,expected))))
+ (with-gensyms (expval)
+ ^(let ((,expval ,expected))
+ (ifa (not (equal (call (compile-toplevel ',expr)) ,expval))
+ (error "test case ~s failed: produced ~s; expected ~s"
+ ',expr it ,expval)))))
+ (if (meq expected :error :warning)
+ (catch
+ (let ((expr-expn (expand expr env)))
+ ^(ifa (not (equal (error-to-sym ,expr-expn) ,expected))
+ (error "test case ~s failed: produced ~s; expected ~s"
+ ',expr it ,expected)))
+ (error (exc)
+ (if (eq expected :warning)
+ (error "test case ~s produced error during expansion, expected ~s"
+ expr expected)))
+ (warning (exc)
+ (if (eq expected :error)
+ (error "test case ~s warned during expansion, expected ~s"
+ expr expected))))
+ (let ((expr-expn (expand expr env))
+ (expval (gensym)))
+ ^(let ((,expval ,expected))
+ (ifa (not (equal ,expr-expn ,expval))
+ (error "test case ~s failed: produced ~s; expected ~s"
+ ',expr it ,expval)))))))
(defmacro test (expr expected)
^(vtest ,expr ',expected))