diff options
| author | Laurenz <laurmaedje@gmail.com> | 2024-04-13 10:39:45 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-13 08:39:45 +0000 |
| commit | 020294fca9a7065d4b9cf4e677f606ebaaa29b00 (patch) | |
| tree | c0027ad22046e2726c22298461327823d6b88d53 /tests/typ/compiler/closure.typ | |
| parent | 72dd79210602ecc799726fc096b078afbb47f299 (diff) | |
Better test runner (#3922)
Diffstat (limited to 'tests/typ/compiler/closure.typ')
| -rw-r--r-- | tests/typ/compiler/closure.typ | 219 |
1 files changed, 0 insertions, 219 deletions
diff --git a/tests/typ/compiler/closure.typ b/tests/typ/compiler/closure.typ deleted file mode 100644 index 29c092b7..00000000 --- a/tests/typ/compiler/closure.typ +++ /dev/null @@ -1,219 +0,0 @@ -// Test closures. -// Ref: false - ---- -// Don't parse closure directly in content. -// Ref: true - -#let x = "x" - -// Should output `x => y`. -#x => y - ---- -// Basic closure without captures. -#{ - let adder = (x, y) => x + y - test(adder(2, 3), 5) -} - ---- -// Pass closure as argument and return closure. -// Also uses shorthand syntax for a single argument. -#{ - let chain = (f, g) => (x) => f(g(x)) - let f = x => x + 1 - let g = x => 2 * x - let h = chain(f, g) - test(h(2), 5) -} - ---- -// Capture environment. -#{ - let mark = "!" - let greet = { - let hi = "Hi" - name => { - hi + ", " + name + mark - } - } - - test(greet("Typst"), "Hi, Typst!") - - // Changing the captured variable after the closure definition has no effect. - mark = "?" - test(greet("Typst"), "Hi, Typst!") -} - ---- -// Redefined variable. -#{ - let x = 1 - let f() = { - let x = x + 2 - x - } - test(f(), 3) -} - ---- -// Import bindings. -#{ - let b = "module.typ" - let f() = { - import b: b - b - } - test(f(), 1) -} - ---- -// For loop bindings. -#{ - let v = (1, 2, 3) - let f() = { - let s = 0 - for v in v { s += v } - s - } - test(f(), 6) -} - ---- -// Let + closure bindings. -#{ - let g = "hi" - let f() = { - let g() = "bye" - g() - } - test(f(), "bye") -} - ---- -// Parameter bindings. -#{ - let x = 5 - let g() = { - let f(x, y: x) = x + y - f - } - - test(g()(8), 13) -} - ---- -// Don't leak environment. -#{ - // Error: 16-17 unknown variable: x - let func() = x - let x = "hi" - func() -} - ---- -// Too few arguments. -#{ - let types(x, y) = "[" + str(type(x)) + ", " + str(type(y)) + "]" - test(types(14%, 12pt), "[ratio, length]") - - // Error: 8-21 missing argument: y - test(types("nope"), "[string, none]") -} - ---- -// Too many arguments. -#{ - let f(x) = x + 1 - - // Error: 8-13 unexpected argument - f(1, "two", () => x) -} - ---- -// Mutable method with capture in argument. -#let x = "b" -#let f() = { - let a = (b: 5) - a.at(x) = 10 - a -} -#f() - ---- -#let x = () -#let f() = { - // Error: 3-4 variables from outside the function are read-only and cannot be modified - x.at(1) = 2 -} -#f() - ---- -// Named arguments. -#{ - let greet(name, birthday: false) = { - if birthday { "Happy Birthday, " } else { "Hey, " } + name + "!" - } - - test(greet("Typst"), "Hey, Typst!") - test(greet("Typst", birthday: true), "Happy Birthday, Typst!") - - // Error: 23-35 unexpected argument: whatever - test(greet("Typst", whatever: 10)) -} - ---- -// Parameter unpacking. -#let f((a, b), ..c) = (a, b, c) -#test(f((1, 2), 3, 4), (1, 2, (3, 4))) - -#let f((k: a, b), c: 3, (d,)) = (a, b, c, d) -#test(f((k: 1, b: 2), (4,)), (1, 2, 3, 4)) - -// Error: 8-14 expected identifier, found destructuring pattern -#let f((a, b): 0) = none - -// Error: 10-19 expected pattern, found array -#let f(..(a, b: c)) = none - -// Error: 10-16 expected pattern, found array -#let f(..(a, b)) = none - ---- -// Error: 11-12 duplicate parameter: x -#let f(x, x) = none - ---- -// Error: 21 expected comma -// Error: 22-23 expected pattern, found integer -// Error: 24-25 unexpected plus -// Error: 26-27 expected pattern, found integer -#let f = (x: () => 1 2 + 3) => 4 - ---- -// Error: 14-15 duplicate parameter: a -// Error: 23-24 duplicate parameter: b -// Error: 35-36 duplicate parameter: b -#let f(a, b, a: none, b: none, c, b) = none - ---- -// Error: 13-14 duplicate parameter: a -#let f(a, ..a) = none - ---- -// Error: 7-14 expected pattern, found string -#((a, "named": b) => none) - ---- -// Error: 10-15 expected pattern, found string -#let foo("key": b) = key - ---- -// Error: 10-14 expected pattern, found `none` -// Hint: 10-14 keyword `none` is not allowed as an identifier; try `none_` instead -#let foo(none: b) = key - ---- -// Error: 10-11 expected identifier, found underscore -#let foo(_: 3) = none |
