summaryrefslogtreecommitdiff
path: root/codegen/interpreter_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'codegen/interpreter_test.go')
-rw-r--r--codegen/interpreter_test.go47
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",
+}}