Skip to content

Commit 3b6a8f8

Browse files
test: Add generated tests for eu.jameshamilton.klox.compile.Compiler.FunctionCompiler
- compile - compile - visitAssignExpr - create
1 parent c1cfe2e commit 3b6a8f8

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package eu.jameshamilton.klox.compile
2+
3+
import eu.jameshamilton.klox.compile
4+
import eu.jameshamilton.klox.execute
5+
import eu.jameshamilton.klox.run
6+
import io.kotest.core.spec.style.FunSpec
7+
import java.io.File
8+
9+
class CompilerFunctionCompilerTest : FunSpec({
10+
test("deeply nested closure captures variable from grandparent scope") {
11+
val loxSource = """
12+
fun outer() {
13+
var x = 42;
14+
fun middle() {
15+
fun inner() {
16+
print x;
17+
}
18+
inner();
19+
}
20+
middle();
21+
}
22+
outer(); // expect: 42
23+
""".trimIndent()
24+
25+
val tempFile = File.createTempFile("nested_closure", ".lox")
26+
tempFile.deleteOnExit()
27+
tempFile.writeText(loxSource)
28+
29+
execute(tempFile) { compile(tempFile)?.let { run(it) } }
30+
}
31+
32+
test("deeply nested closure captures and modifies variable from grandparent scope") {
33+
val loxSource = """
34+
fun outer() {
35+
var x = 1;
36+
fun middle() {
37+
fun inner() {
38+
x = x + 10;
39+
}
40+
inner();
41+
}
42+
middle();
43+
print x; // expect: 11
44+
}
45+
outer();
46+
""".trimIndent()
47+
48+
val tempFile = File.createTempFile("nested_closure_modify", ".lox")
49+
tempFile.deleteOnExit()
50+
tempFile.writeText(loxSource)
51+
52+
execute(tempFile) { compile(tempFile)?.let { run(it) } }
53+
}
54+
})

0 commit comments

Comments
 (0)