Skip to content

Commit d000ec3

Browse files
committed
feat: add test programs for variable resolution and scoping rules
1 parent cbf2538 commit d000ec3

File tree

12 files changed

+108
-5
lines changed

12 files changed

+108
-5
lines changed

test_programs/r1/1.lox

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
11
---
22
expected_error_type: none
33
---
4+
var a = "outer";
5+
{
6+
fun foo() {
7+
print a;
8+
}
9+
10+
foo(); // expect: outer
11+
var a = "inner";
12+
foo(); // expect: outer
13+
}

test_programs/r1/2.lox

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
11
---
22
expected_error_type: none
33
---
4+
fun global() {
5+
print "global";
6+
}
7+
8+
{
9+
fun f() {
10+
global();
11+
}
12+
13+
f();
14+
fun global() {
15+
print "local";
16+
}
17+
f();
18+
}

test_programs/r1/3.lox

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
11
---
22
expected_error_type: none
33
---
4+
// Multiple Nested Functions with Shadowing
5+
var x = "global";
6+
7+
fun outer() {
8+
var x = "outer";
9+
10+
fun middle() {
11+
fun inner() {
12+
print x; // Should capture "outer", not "global" or "inner"
13+
}
14+
15+
inner();
16+
var x = "middle";
17+
inner(); // Should still print "outer"
18+
}
19+
20+
middle();
21+
}
22+
23+
outer();

test_programs/r1/4.lox

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
11
---
22
expected_error_type: none
33
---
4+
// Function Returning a Function
5+
var count = 0;
6+
7+
{
8+
fun makeCounter() {
9+
fun counter() {
10+
count = count + 1;
11+
print count;
12+
}
13+
return counter;
14+
}
15+
16+
var counter1 = makeCounter();
17+
counter1(); // Should print 1
18+
counter1(); // Should print 2
19+
20+
var count = 0;
21+
counter1(); // Should print 3
22+
}

test_programs/r4/1.lox

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
---
22
expected_error_type: none
33
---
4+
var a = "value";
5+
var a = a;
6+
print a; // expect: value

test_programs/r4/2.lox

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
---
22
expected_error_type: none
33
---
4+
var a = "outer";
5+
{
6+
var a = a; // Error at 'a': Can't read local variable in its own initializer.
7+
}

test_programs/r6/1.lox

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
---
22
expected_error_type: none
33
---
4+
if (false) {
5+
print notDefined;
6+
}
7+
8+
print "ok"; // expect: ok

test_programs/r6/2.lox

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
---
2-
expected_error_type: none
2+
expected_error_type: compile
33
---
4+
print a; // expect: compile error
5+
var a = "value";
6+
print a; // expect: value

test_programs/r7/1.lox

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
---
2-
expected_error_type: none
2+
expected_error_type: compile
33
---
4+
{
5+
var a = "value";
6+
var a = "other"; // Error at 'a': Already a variable with this name in this scope.
7+
}

test_programs/r7/2.lox

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
---
2-
expected_error_type: none
2+
expected_error_type: compile
33
---
4+
fun foo(a) {
5+
var a; // Error at 'a': Already a variable with this name in this scope.
6+
}

0 commit comments

Comments
 (0)