-
Notifications
You must be signed in to change notification settings - Fork 0
/
parser_test.go
90 lines (82 loc) · 1.92 KB
/
parser_test.go
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
package zeno
import (
"fmt"
"math"
"testing"
)
func assert(t *testing.T, condition bool, msg string) {
if !condition {
t.Error(msg)
}
}
func TestToPostfix(t *testing.T) {
tests := []struct {
expression string
expected string
}{
{"1+1", "1 1 +"},
{"1+2", "1 2 +"},
{"2----1", "2 -1 -"},
{"2---1", "2 1 -"},
{"1+1*2", "1 1 2 * +"},
{"2.1483*3.14^x+4", "2.1483 3.14 x ^ * 4 +"},
{"-2.1483*3.14^x+4", "-2.1483 3.14 x ^ * 4 +"},
{"-2*(x+2)^2", "-2 x 2 + 2 ^ *"},
{"1^-2", "1 -2 ^"},
{"2*sin(x)", "2 x sin *"},
{"2*-sin(x)", "2 x -sin *"},
{"2*-sin(-x^-2)-2*-1", "2 -x -2 ^ -sin * 2 -1 * -"},
{"min(1, 2)", "1 2 min"}, // ignore commas
}
for _, test := range tests {
result, _ := ToPostfix(test.expression)
assert(t, result == test.expected,
fmt.Sprintf("TestToPostfix(%s) returned %s instead of %s",
test.expression, result, test.expected),
)
}
}
func TestCalculateExpression(t *testing.T) {
tests := []struct {
expression string
expected float64
}{
{"1+1", 1 + 1},
{"1+3*2", 1 + 3*2},
{"sin(0)", 0},
{"(2+3^2)^2", (2 + 3*3) * (2 + 3*3)},
{"2/3 + 2*3", 2.0/3.0 + 2.0*3.0},
{"-2 + 5", -2 + 5},
{"sin(1)", math.Sin(1)},
{"min(1,2)", 1},
{"max(1,2)", 2},
{"log(2,8)", 3},
{"x+1", 0},
}
for _, test := range tests {
result, _ := CalculateExpression(test.expression)
assert(t, result == test.expected,
fmt.Sprintf("TestCalculateExpression(%s) = %f, should be %f",
test.expression, result, test.expected),
)
}
}
func TestLaTeX(t *testing.T) {
tests := []struct {
expression string
expected string
}{
{"1+1", "1+1"},
{"1/1", "\\frac{1}{1}"},
{"1/(5+6)", "\\frac{1}{5+6}"},
}
for _, test := range tests {
postfix, _ := ToPostfix(test.expression)
tree, _ := PostfixToTree(postfix)
result := tree.LaTeX()
assert(t, result == test.expected,
fmt.Sprintf("TestLaTeX(%s) = %s, should be %s",
test.expression, result, test.expected),
)
}
}