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.go42
1 files changed, 23 insertions, 19 deletions
diff --git a/evaluator/evaluator_test.go b/evaluator/evaluator_test.go
index f8fb53b..606078a 100644
--- a/evaluator/evaluator_test.go
+++ b/evaluator/evaluator_test.go
@@ -31,7 +31,7 @@ func TestEvalIntegerExpression(t *testing.T) {
}
for _, tt := range tests {
- evaluated := testEval(tt.input)
+ evaluated := testEval(t, tt.input)
testIntegerObject(t, evaluated, tt.expected)
}
}
@@ -67,7 +67,7 @@ func TestEvalBooleanExpression(t *testing.T) {
}
for _, tt := range tests {
- evaluated := testEval(tt.input)
+ evaluated := testEval(t, tt.input)
testBooleanObject(t, evaluated, tt.expected)
}
}
@@ -86,7 +86,7 @@ func TestBangOperator(t *testing.T) {
}
for _, tt := range tests {
- evaluated := testEval(tt.input)
+ evaluated := testEval(t, tt.input)
testBooleanObject(t, evaluated, tt.expected)
}
}
@@ -106,7 +106,7 @@ func TestIfElseExpressions(t *testing.T) {
}
for _, tt := range tests {
- evaluated := testEval(tt.input)
+ evaluated := testEval(t, tt.input)
integer, ok := tt.expected.(int)
if ok {
testIntegerObject(t, evaluated, int64(integer))
@@ -160,7 +160,7 @@ f(10);`,
}
for _, tt := range tests {
- evaluated := testEval(tt.input)
+ evaluated := testEval(t, tt.input)
testIntegerObject(t, evaluated, tt.expected)
}
}
@@ -229,7 +229,7 @@ if (10 > 1) {
}
for _, tt := range tests {
- evaluated := testEval(tt.input)
+ evaluated := testEval(t, tt.input)
errObj, ok := evaluated.(*object.Error)
if !ok {
@@ -257,14 +257,14 @@ func TestLetStatements(t *testing.T) {
}
for _, tt := range tests {
- testIntegerObject(t, testEval(tt.input), tt.expected)
+ testIntegerObject(t, testEval(t, tt.input), tt.expected)
}
}
func TestFunctionObject(t *testing.T) {
input := "fn(x) { x + 2; };"
- evaluated := testEval(input)
+ evaluated := testEval(t, input)
fn, ok := evaluated.(*object.Function)
if !ok {
t.Fatalf("object is not Function. got=%T (%+v)", evaluated, evaluated)
@@ -300,7 +300,7 @@ func TestFunctionApplication(t *testing.T) {
}
for _, tt := range tests {
- testIntegerObject(t, testEval(tt.input), tt.expected)
+ testIntegerObject(t, testEval(t, tt.input), tt.expected)
}
}
@@ -318,7 +318,7 @@ let ourFunction = fn(first) {
ourFunction(20) + first + second;`
- testIntegerObject(t, testEval(input), 70)
+ testIntegerObject(t, testEval(t, input), 70)
}
func TestClosures(t *testing.T) {
@@ -330,13 +330,13 @@ let newAdder = fn(x) {
let addTwo = newAdder(2);
addTwo(2);`
- testIntegerObject(t, testEval(input), 4)
+ testIntegerObject(t, testEval(t, input), 4)
}
func TestStringLiteral(t *testing.T) {
input := `"Hello World!"`
- evaluated := testEval(input)
+ evaluated := testEval(t, input)
str, ok := evaluated.(*object.String)
if !ok {
t.Fatalf("object is not String. got=%T (%+v)", evaluated, evaluated)
@@ -350,7 +350,7 @@ func TestStringLiteral(t *testing.T) {
func TestStringConcatenation(t *testing.T) {
input := `"Hello" + " " + "World!"`
- evaluated := testEval(input)
+ evaluated := testEval(t, input)
str, ok := evaluated.(*object.String)
if !ok {
t.Fatalf("object is not String. got=%T (%+v)", evaluated, evaluated)
@@ -387,7 +387,7 @@ func TestBuiltinFunctions(t *testing.T) {
}
for _, tt := range tests {
- evaluated := testEval(tt.input)
+ evaluated := testEval(t, tt.input)
switch expected := tt.expected.(type) {
case int:
@@ -428,7 +428,7 @@ func TestBuiltinFunctions(t *testing.T) {
func TestArrayLiterals(t *testing.T) {
input := "[1, 2 * 2, 3 + 3]"
- evaluated := testEval(input)
+ evaluated := testEval(t, input)
result, ok := evaluated.(*object.Array)
if !ok {
t.Fatalf("object is not Array. got=%T (%+v)", evaluated, evaluated)
@@ -492,7 +492,7 @@ func TestArrayIndexExpressions(t *testing.T) {
}
for _, tt := range tests {
- evaluated := testEval(tt.input)
+ evaluated := testEval(t, tt.input)
integer, ok := tt.expected.(int)
if ok {
testIntegerObject(t, evaluated, int64(integer))
@@ -513,7 +513,7 @@ func TestHashLiterals(t *testing.T) {
false: 6
}`
- evaluated := testEval(input)
+ evaluated := testEval(t, input)
result, ok := evaluated.(*object.Hash)
if !ok {
t.Fatalf("Eval didn't return Hash. got=%T (%+v)", evaluated, evaluated)
@@ -578,7 +578,7 @@ func TestHashIndexExpressions(t *testing.T) {
}
for _, tt := range tests {
- evaluated := testEval(tt.input)
+ evaluated := testEval(t, tt.input)
integer, ok := tt.expected.(int)
if ok {
testIntegerObject(t, evaluated, int64(integer))
@@ -587,7 +587,8 @@ func TestHashIndexExpressions(t *testing.T) {
}
}
}
-func testEval(input string) object.Object {
+func testEval(t *testing.T, input string) object.Object {
+ t.Helper()
l := lexer.New(input)
p := parser.New(l)
program := p.ParseProgram()
@@ -597,6 +598,7 @@ func testEval(input string) object.Object {
}
func testIntegerObject(t *testing.T, obj object.Object, expected int64) bool {
+ t.Helper()
result, ok := obj.(*object.Integer)
if !ok {
t.Errorf("object is not Integer. got=%T (%+v)", obj, obj)
@@ -612,6 +614,7 @@ func testIntegerObject(t *testing.T, obj object.Object, expected int64) bool {
}
func testBooleanObject(t *testing.T, obj object.Object, expected bool) bool {
+ t.Helper()
result, ok := obj.(*object.Boolean)
if !ok {
t.Errorf("object is not Boolean. got=%T (%+v)", obj, obj)
@@ -626,6 +629,7 @@ func testBooleanObject(t *testing.T, obj object.Object, expected bool) bool {
}
func testNullObject(t *testing.T, obj object.Object) bool {
+ t.Helper()
if obj != NULL {
t.Errorf("object is not NULL. got=%T (%+v)", obj, obj)
return false