12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package expr
- import (
- "fmt"
- "testing"
- )
- func TestExpr(t *testing.T) {
- tests := []struct {
- expr string
- env Env
- want string
- }{
- {"$1 > 80 && $2 <9", Env{"$1": 100, "$2": 2}, "true"},
- {"$1 % 10", Env{"$1": 104, "$2": 2}, "4"},
- {"pow(x, false) + pow(y, false)", Env{"x": 12, "y": 1}, "2"},
- {"pow(x, 3) + pow(y, 3)", Env{"x": 9, "y": 10}, "1729"},
- {"5.0 / 9 * (F - 32)", Env{"F": -40}, "-40"},
- {"5.0 / 9 * (F - 32)", Env{"F": 32}, "0"},
- {"5.0 / 9 * (F - 32)", Env{"F": 212}, "100"},
- ////!-Eval
- //// additional tests that don't appear in the book
- {"-1 + -x", Env{"x": 1}, "-2"},
- {"-1 - x", Env{"x": 1}, "-2"},
- {"a >= 10", Env{"a": 15}, "true"},
- {"b >= sin(10) && a < 1", Env{"a": 9, "b": 10}, "false"},
- {"!!!true", Env{"a": 9, "b": 10}, "false"},
- //!+Eval
- }
- var prevExpr string
- parser := NewExpressionParser()
- for _, test := range tests {
- // Print expr only when it changes.
- if test.expr != prevExpr {
- t.Logf("\n%s\n", test.expr)
- prevExpr = test.expr
- }
- if err := parser.Parse(test.expr); err != nil {
- t.Error(err) // parse error
- continue
- }
- got := fmt.Sprintf("%v", parser.GetExpr().Eval(test.env))
- t.Logf("\t%v => %s\n", test.env, got)
- if got != test.want {
- t.Errorf("%s.Eval() in %v = %q, want %q\n",
- test.expr, test.env, got, test.want)
- }
- }
- }
|