summaryrefslogtreecommitdiff
path: root/codegen/interpreter_test.go
blob: 2563677ee680036de74d5975f5f4f91416dd106c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package codegen

import (
	"fmt"
	"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)
			}
		})
	}
}

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 b }; f(5)",
	res: "6",
}, { // #04
	src: "func f(a int) (b int) { b = a + 1; return }; f(5)",
	res: "6",
}}