summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/012/stack.tl31
-rw-r--r--tests/common.tl3
2 files changed, 34 insertions, 0 deletions
diff --git a/tests/012/stack.tl b/tests/012/stack.tl
new file mode 100644
index 00000000..a8d06487
--- /dev/null
+++ b/tests/012/stack.tl
@@ -0,0 +1,31 @@
+(load "../common")
+
+(defun recur () (recur))
+
+(defmacro so (expr)
+ ^(catch ,expr
+ (stack-overflow (exc) :so)))
+
+(test (so (recur)) :so)
+
+(test (let ((pid (fork)))
+ (cond
+ ((zerop pid) (set-stack-limit 0) (recur))
+ (t (let ((status (wait pid)))
+ (w-ifsignaled status)))))
+ t)
+
+(defmacro infexp ()
+ ^(foo (infexp)))
+
+(test (so (expand '(infexp))) :so)
+
+(defvarl orig (get-stack-limit))
+
+(mvtest
+ (set-stack-limit nil) orig
+ (set-stack-limit orig) nil
+ (set-stack-limit 0) orig
+ (set-stack-limit orig) nil
+ (set-stack-limit 65536) orig
+ (set-stack-limit orig) 65536)
diff --git a/tests/common.tl b/tests/common.tl
index 4011583f..b9e46ad3 100644
--- a/tests/common.tl
+++ b/tests/common.tl
@@ -36,6 +36,9 @@
(defmacro mtest (. pairs)
^(progn ,*(mapcar (op cons 'test) (tuples 2 pairs))))
+(defmacro mvtest (. pairs)
+ ^(progn ,*(mapcar (op cons 'vtest) (tuples 2 pairs))))
+
(defmacro mstest (. pairs)
^(progn ,*(mapcar (op cons 'stest) (tuples 2 pairs))))