summaryrefslogtreecommitdiff
path: root/tests/typ/compiler/recursion.typ
diff options
context:
space:
mode:
Diffstat (limited to 'tests/typ/compiler/recursion.typ')
-rw-r--r--tests/typ/compiler/recursion.typ42
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/typ/compiler/recursion.typ b/tests/typ/compiler/recursion.typ
new file mode 100644
index 00000000..ae214631
--- /dev/null
+++ b/tests/typ/compiler/recursion.typ
@@ -0,0 +1,42 @@
+// Test recursive function calls.
+// Ref: false
+
+---
+// Test with named function.
+#let fib(n) = {
+ if n <= 2 {
+ 1
+ } else {
+ fib(n - 1) + fib(n - 2)
+ }
+}
+
+#test(fib(10), 55)
+
+---
+// Test with unnamed function.
+// Error: 17-18 unknown variable
+#let f = (n) => f(n - 1)
+#f(10)
+
+---
+// Test capturing with named function.
+#let f = 10
+#let f() = f
+#test(type(f()), "function")
+
+---
+// Test capturing with unnamed function.
+#let f = 10
+#let f = () => f
+#test(type(f()), "integer")
+
+---
+// Error: 15-21 maximum function call depth exceeded
+#let rec(n) = rec(n) + 1
+#rec(1)
+
+---
+#let f(x) = "hello"
+#let f(x) = if x != none { f(none) } else { "world" }
+#test(f(1), "world")