diff options
| author | Marc Vertes <mvertes@free.fr> | 2023-09-04 16:58:15 +0200 |
|---|---|---|
| committer | Marc Vertes <mvertes@free.fr> | 2023-09-04 16:58:15 +0200 |
| commit | 4241593b42bffac2f8fcb63f1e88621fe025e360 (patch) | |
| tree | 48680879982947524e1b028e179608bb5cbcda23 /codegen/interpreter_test.go | |
| parent | 8feddd9b3eefb920c4a0c7a5b4c3b8ae160f3c71 (diff) | |
codegen: add interpreter tests
Also simplify project structure. The executable is now produced in
the root directory. Work in progress.
Diffstat (limited to 'codegen/interpreter_test.go')
| -rw-r--r-- | codegen/interpreter_test.go | 47 |
1 files changed, 47 insertions, 0 deletions
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", +}} |
