From 886a16e706be713cbf5e03f26d044dd7cc90d842 Mon Sep 17 00:00:00 2001 From: tijani Date: Sun, 7 Aug 2022 14:58:35 +0000 Subject: [PATCH] Spelling corrections Interpreter can now evaluate Booleans git-svn-id: https://svn.tlawal.org/svn/monkey@45 f6afcba9-9ef1-4bdd-9b72-7484f5705bac --- evaluator/evaluator.go | 3 +++ evaluator/evaluator_test.go | 30 ++++++++++++++++++++++++++++++ object/object.go | 4 ++-- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/evaluator/evaluator.go b/evaluator/evaluator.go index dc480b9..5ab22bf 100644 --- a/evaluator/evaluator.go +++ b/evaluator/evaluator.go @@ -17,6 +17,9 @@ func Eval(node ast.Node) object.Object { // Expressions case *ast.IntegerLiteral: return &object.Integer{Value: node.Value} + + case *ast.Boolean: + return &object.Boolean{Value: node.Value} } return nil diff --git a/evaluator/evaluator_test.go b/evaluator/evaluator_test.go index aceb434..ade6bd7 100644 --- a/evaluator/evaluator_test.go +++ b/evaluator/evaluator_test.go @@ -22,6 +22,22 @@ func TestEvalIntegerExpression(l_test *testing.T) { } } +func TestEvalBooleanExpression(l_test *testing.T){ + tests := []struct { + input string + expected bool + }{ + {"true", true}, + {"false", false}, + } + + for _, tt := range tests{ + evaluated := test_eval(tt.input) + test_boolean_object(l_test, evaluated, tt.expected) + } + } + + // Helpers func test_eval(input string) object.Object { l_lexer := lexer.New(input) @@ -43,3 +59,17 @@ func test_integer_object(l_test *testing.T, l_object object.Object, expected int } return true } + +func test_boolean_object(l_test *testing.T, l_object object.Object, expected bool)bool { + result, ok := l_object.(*object.Boolean) + if !ok { + l_test.Errorf("object is not Boolean, got=%T (%+v)", l_object, l_object) + return false + } + + if result.Value != expected { + l_test.Errorf("object has wrong value, got=%T, want=%t", result.Value, expected) + return false + } + return true +} diff --git a/object/object.go b/object/object.go index e81b429..1b48711 100644 --- a/object/object.go +++ b/object/object.go @@ -37,7 +37,7 @@ func (b *Boolean) Type() ObjectType { return BOOLEAN_OBJECT } -func (b *Boolean) Inpect() string { +func (b *Boolean) Inspect() string { return fmt.Sprintf("%t", b.Value) } @@ -48,6 +48,6 @@ func (n *Null) Type() ObjectType { return NULL_OBJECT } -func (n *Null) Inpect() string { +func (n *Null) Inspect() string { return "null" }