From 4241593b42bffac2f8fcb63f1e88621fe025e360 Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Mon, 4 Sep 2023 16:58:15 +0200 Subject: codegen: add interpreter tests Also simplify project structure. The executable is now produced in the root directory. Work in progress. --- codegen/interpreter_test.go | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 codegen/interpreter_test.go (limited to 'codegen/interpreter_test.go') diff --git a/codegen/interpreter_test.go b/codegen/interpreter_test.go new file mode 100644 index 0000000..1d8a6b5 --- /dev/null +++ b/codegen/interpreter_test.go @@ -0,0 +1,47 @@ +package codegen + +import ( + "fmt" + "log" + "testing" + + "github.com/gnolang/parscan/lang/golang" +) + +func TestEval(t *testing.T) { + for _, test := range evalTests { + test := test + t.Run("", func(t *testing.T) { + interp := NewInterpreter(golang.GoParser) + errStr := "" + r, e := interp.Eval(test.src) + if e != nil { + errStr = e.Error() + } + if errStr != test.err { + t.Errorf("got error %#v, want error %#v", errStr, test.err) + } + res := fmt.Sprintf("%v", r) + if res != test.res { + t.Errorf("got %#v, want %#v", res, test.res) + } + log.Println(r, e) + }) + } +} + +var evalTests = []struct { + name, src, res, err string +}{{ /* #00 */ + src: "1 + 2", + res: "3", +}, { // #01 + src: "a := 2; a = a + 3", + res: "5", +}, { // #02 + src: "func f(a int) int { return a + 1 }; f(5)", + res: "6", +}, { // #03 + src: "func f(a int) (b int) { b = a + 1; return }; f(5)", + res: "6", +}} -- cgit v1.2.3