summaryrefslogtreecommitdiff
path: root/examples/eval_arith.py
diff options
context:
space:
mode:
authorKyle Lahnakoski <klahnakoski@mozilla.com>2020-02-23 20:39:54 -0500
committerGitHub <noreply@github.com>2020-02-23 19:39:54 -0600
commitff8b6abca50e82f3ce78f119ca3c2ad285b22cf3 (patch)
tree8a17b332538709798ed16b788aeba50b0f5e56ef /examples/eval_arith.py
parent664d9e7e33e33fef48a4d8a36104be01ecfcd2f9 (diff)
downloadpyparsing-git-ff8b6abca50e82f3ce78f119ca3c2ad285b22cf3.tar.gz
ensure test can fail (#178)
Diffstat (limited to 'examples/eval_arith.py')
-rw-r--r--examples/eval_arith.py195
1 files changed, 93 insertions, 102 deletions
diff --git a/examples/eval_arith.py b/examples/eval_arith.py
index bfd0ce0..6a747f3 100644
--- a/examples/eval_arith.py
+++ b/examples/eval_arith.py
@@ -163,107 +163,98 @@ comp_expr = infixNotation(
)
-def main():
- # sample expressions posted on comp.lang.python, asking for advice
- # in safely evaluating them
- rules = [
- "( A - B ) = 0",
- "(A + B + C + D + E + F + G + H + I) = J",
- "(A + B + C + D + E + F + G + H) = I",
- "(A + B + C + D + E + F) = G",
- "(A + B + C + D + E) = (F + G + H + I + J)",
- "(A + B + C + D + E) = (F + G + H + I)",
- "(A + B + C + D + E) = F",
- "(A + B + C + D) = (E + F + G + H)",
- "(A + B + C) = (D + E + F)",
- "(A + B) = (C + D + E + F)",
- "(A + B) = (C + D)",
- "(A + B) = (C - D + E - F - G + H + I + J)",
- "(A + B) = C",
- "(A + B) = 0",
- "(A+B+C+D+E) = (F+G+H+I+J)",
- "(A+B+C+D) = (E+F+G+H)",
- "(A+B+C+D)=(E+F+G+H)",
- "(A+B+C)=(D+E+F)",
- "(A+B)=(C+D)",
- "(A+B)=C",
- "(A-B)=C",
- "(A/(B+C))",
- "(B/(C+D))",
- "(G + H) = I",
- "-0.99 LE ((A+B+C)-(D+E+F+G)) LE 0.99",
- "-0.99 LE (A-(B+C)) LE 0.99",
- "-1000.00 LE A LE 0.00",
- "-5000.00 LE A LE 0.00",
- "A < B",
- "A < 7000",
- "A = -(B)",
- "A = C",
- "A = 0",
- "A GT 0",
- "A GT 0.00",
- "A GT 7.00",
- "A LE B",
- "A LT -1000.00",
- "A LT -5000",
- "A LT 0",
- "A=(B+C+D)",
- "A=B",
- "I = (G + H)",
- "0.00 LE A LE 4.00",
- "4.00 LT A LE 7.00",
- "0.00 LE A LE 4.00 LE E > D",
- "2**2**(A+3)",
- ]
- vars_ = {
- "A": 0,
- "B": 1.1,
- "C": 2.2,
- "D": 3.3,
- "E": 4.4,
- "F": 5.5,
- "G": 6.6,
- "H": 7.7,
- "I": 8.8,
- "J": 9.9,
- }
-
- # define tests from given rules
- tests = []
- for t in rules:
- t_orig = t
- t = t.replace("=", "==")
- t = t.replace("EQ", "==")
- t = t.replace("LE", "<=")
- t = t.replace("GT", ">")
- t = t.replace("LT", "<")
- t = t.replace("GE", ">=")
- t = t.replace("LE", "<=")
- t = t.replace("NE", "!=")
- t = t.replace("<>", "!=")
- tests.append((t_orig, eval(t, vars_)))
-
- # copy vars_ to EvalConstant lookup dict
- EvalConstant.vars_ = vars_
- failed = 0
- for test, expected in tests:
- ret = comp_expr.parseString(test)[0]
- parsedvalue = ret.eval()
- print(test, expected, parsedvalue)
- if parsedvalue != expected:
- print("<<< FAIL")
- failed += 1
- else:
- print("")
-
- print("")
- if failed:
- print(failed, "tests FAILED")
- return 1
+# sample expressions posted on comp.lang.python, asking for advice
+# in safely evaluating them
+rules = [
+ "( A - B ) = 0",
+ "(A + B + C + D + E + F + G + H + I) = J",
+ "(A + B + C + D + E + F + G + H) = I",
+ "(A + B + C + D + E + F) = G",
+ "(A + B + C + D + E) = (F + G + H + I + J)",
+ "(A + B + C + D + E) = (F + G + H + I)",
+ "(A + B + C + D + E) = F",
+ "(A + B + C + D) = (E + F + G + H)",
+ "(A + B + C) = (D + E + F)",
+ "(A + B) = (C + D + E + F)",
+ "(A + B) = (C + D)",
+ "(A + B) = (C - D + E - F - G + H + I + J)",
+ "(A + B) = C",
+ "(A + B) = 0",
+ "(A+B+C+D+E) = (F+G+H+I+J)",
+ "(A+B+C+D) = (E+F+G+H)",
+ "(A+B+C+D)=(E+F+G+H)",
+ "(A+B+C)=(D+E+F)",
+ "(A+B)=(C+D)",
+ "(A+B)=C",
+ "(A-B)=C",
+ "(A/(B+C))",
+ "(B/(C+D))",
+ "(G + H) = I",
+ "-0.99 LE ((A+B+C)-(D+E+F+G)) LE 0.99",
+ "-0.99 LE (A-(B+C)) LE 0.99",
+ "-1000.00 LE A LE 0.00",
+ "-5000.00 LE A LE 0.00",
+ "A < B",
+ "A < 7000",
+ "A = -(B)",
+ "A = C",
+ "A = 0",
+ "A GT 0",
+ "A GT 0.00",
+ "A GT 7.00",
+ "A LE B",
+ "A LT -1000.00",
+ "A LT -5000",
+ "A LT 0",
+ "A=(B+C+D)",
+ "A=B",
+ "I = (G + H)",
+ "0.00 LE A LE 4.00",
+ "4.00 LT A LE 7.00",
+ "0.00 LE A LE 4.00 LE E > D",
+ "2**2**(A+3)",
+]
+vars_ = {
+ "A": 0,
+ "B": 1.1,
+ "C": 2.2,
+ "D": 3.3,
+ "E": 4.4,
+ "F": 5.5,
+ "G": 6.6,
+ "H": 7.7,
+ "I": 8.8,
+ "J": 9.9,
+}
+
+# define tests from given rules
+tests = []
+for t in rules:
+ t_orig = t
+ t = t.replace("=", "==")
+ t = t.replace("EQ", "==")
+ t = t.replace("LE", "<=")
+ t = t.replace("GT", ">")
+ t = t.replace("LT", "<")
+ t = t.replace("GE", ">=")
+ t = t.replace("LE", "<=")
+ t = t.replace("NE", "!=")
+ t = t.replace("<>", "!=")
+ tests.append((t_orig, eval(t, vars_)))
+
+# copy vars_ to EvalConstant lookup dict
+EvalConstant.vars_ = vars_
+failed = 0
+for test, expected in tests:
+ ret = comp_expr.parseString(test)[0]
+ parsedvalue = ret.eval()
+ print(test, expected, parsedvalue)
+ if parsedvalue != expected:
+ print("<<< FAIL")
+ failed += 1
else:
- print("all tests PASSED")
- return 0
-
+ print("")
-if __name__ == "__main__":
- exit(main())
+print("")
+if failed:
+ raise Exception("could not parse")