summaryrefslogtreecommitdiff
path: root/tests/typ
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-12-30 09:48:30 +0100
committerLaurenz <laurmaedje@gmail.com>2022-12-30 09:48:30 +0100
commit68c6160a14be4e77b98cd704d9e641a03aefa332 (patch)
tree3eb0d02bf16e62cf43b7e5426126934b4ce7fbf2 /tests/typ
parenta12bc3a797c1a29ef223c9e8be6c52cc4e748a02 (diff)
Recursion with max depth
Diffstat (limited to 'tests/typ')
-rw-r--r--tests/typ/compiler/let.typ4
-rw-r--r--tests/typ/compiler/recursion.typ42
2 files changed, 44 insertions, 2 deletions
diff --git a/tests/typ/compiler/let.typ b/tests/typ/compiler/let.typ
index c3be64a5..d4f9510a 100644
--- a/tests/typ/compiler/let.typ
+++ b/tests/typ/compiler/let.typ
@@ -11,8 +11,8 @@
// Syntax sugar for function definitions.
#let fill = conifer
-#let rect(body) = rect(width: 2cm, fill: fill, inset: 5pt, body)
-#rect[Hi!]
+#let f(body) = rect(width: 2cm, fill: fill, inset: 5pt, body)
+#f[Hi!]
---
// Termination.
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")