-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinterpret_test.go
More file actions
92 lines (82 loc) · 2.47 KB
/
interpret_test.go
File metadata and controls
92 lines (82 loc) · 2.47 KB
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package main
import (
"bufio"
"bytes"
"fmt"
"genTest/core"
"os"
"testing"
)
func TestInterpret(t *testing.T) {
os.Setenv("GENTEST_MODE", "TEST")
fp, _ := os.Open("./sample_code/grammar_example.gent")
scanner := bufio.NewScanner(fp)
w := new(bytes.Buffer)
err := core.Exec(scanner, w)
if err != nil {
errMsg := err.Error()
t.Fatal(errMsg)
}
output := w.String()
expected := `このようなことしかできません。
できることその1: 演算
(2.0 + (3.0 - 4.0) / 5.0) + 0.1 * 2.0 is 2.0000000000000000
できることその2: 評価
1 < 2 && (3 != 3 || true) is true
できることその3: 文字列結合
できることその4: IF文による分岐
2020 年は
うるう年です。
できることその5: FOR文による分岐
ライプニッツの公式(n=10)より
π ≒ 3.0418396189294028
演算
結果1: 0.6000000000000001
結果2: 0.0000000000000000
結果3: -0.6000000000000001
式評価
結果1: true
結果2: false
結果3: false
IF文
3
4
5
FOR文
i: 0 j: 0 k: 0
i: 0 j: 0 k: 1.0000000000000000
i: 0 j: 0 k: 2.0000000000000000
i: 0 j: 1.0000000000000000 k: 0
i: 0 j: 1.0000000000000000 k: 1.0000000000000000
i: 0 j: 1.0000000000000000 k: 2.0000000000000000
i: 0 j: 2.0000000000000000 k: 0
i: 0 j: 2.0000000000000000 k: 1.0000000000000000
i: 0 j: 2.0000000000000000 k: 2.0000000000000000
i: 1.0000000000000000 j: 0 k: 0
i: 1.0000000000000000 j: 0 k: 1.0000000000000000
i: 1.0000000000000000 j: 0 k: 2.0000000000000000
i: 1.0000000000000000 j: 1.0000000000000000 k: 0
i: 1.0000000000000000 j: 1.0000000000000000 k: 1.0000000000000000
i: 1.0000000000000000 j: 1.0000000000000000 k: 2.0000000000000000
i: 1.0000000000000000 j: 2.0000000000000000 k: 0
i: 1.0000000000000000 j: 2.0000000000000000 k: 1.0000000000000000
i: 1.0000000000000000 j: 2.0000000000000000 k: 2.0000000000000000
i: 2.0000000000000000 j: 0 k: 0
i: 2.0000000000000000 j: 0 k: 1.0000000000000000
i: 2.0000000000000000 j: 0 k: 2.0000000000000000
i: 2.0000000000000000 j: 1.0000000000000000 k: 0
i: 2.0000000000000000 j: 1.0000000000000000 k: 1.0000000000000000
i: 2.0000000000000000 j: 1.0000000000000000 k: 2.0000000000000000
i: 2.0000000000000000 j: 2.0000000000000000 k: 0
i: 2.0000000000000000 j: 2.0000000000000000 k: 1.0000000000000000
i: 2.0000000000000000 j: 2.0000000000000000 k: 2.0000000000000000
関数
Hello!
6.0000000000000000
π ≒ 3.1415926535897940
`
if output != expected {
errMsg := fmt.Sprintf("Expected output is \"%s\", but actual is \"%s\".", expected, output)
t.Fatal(errMsg)
}
}