aboutsummaryrefslogtreecommitdiff
path: root/evaluator/evaluator_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'evaluator/evaluator_test.go')
-rw-r--r--evaluator/evaluator_test.go24
1 files changed, 23 insertions, 1 deletions
diff --git a/evaluator/evaluator_test.go b/evaluator/evaluator_test.go
index 6553f55..38fed91 100644
--- a/evaluator/evaluator_test.go
+++ b/evaluator/evaluator_test.go
@@ -177,6 +177,10 @@ func TestErrorhandling(t *testing.T) {
`,
"unknown operator: BOOLEAN + BOOLEAN",
},
+ {
+ "foobar",
+ "identifier not found: foobar",
+ },
}
for _, tt := range tests {
@@ -194,11 +198,29 @@ func TestErrorhandling(t *testing.T) {
}
}
+func TestLetStatements(t *testing.T) {
+ tests := []struct {
+ input string
+ expected int64
+ } {
+ {"let a = 5; a;", 5},
+ {"let a = 5 * 5; a;", 25},
+ {"let a = 5; let b = a; b;", 5},
+ {"let a = 5; let b = a; let c = a + b + 5; c;", 15},
+ }
+
+ for _, tt := range tests {
+ testIntegerObject(t, testEval(tt.input), tt.expected)
+ }
+}
+
func testEval(input string) object.Object {
l := lexer.New(input)
p := parser.New(l)
program := p.ParseProgram()
- return Eval(program)
+ env := object.NewEnvironment()
+
+ return Eval(program, env)
}
func testIntegerObject(t *testing.T, obj object.Object, expected int64) bool {