diff options
author | Kyle Lahnakoski <klahnakoski@mozilla.com> | 2020-02-23 20:39:54 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-23 19:39:54 -0600 |
commit | ff8b6abca50e82f3ce78f119ca3c2ad285b22cf3 (patch) | |
tree | 8a17b332538709798ed16b788aeba50b0f5e56ef /examples/eval_arith.py | |
parent | 664d9e7e33e33fef48a4d8a36104be01ecfcd2f9 (diff) | |
download | pyparsing-git-ff8b6abca50e82f3ce78f119ca3c2ad285b22cf3.tar.gz |
ensure test can fail (#178)
Diffstat (limited to 'examples/eval_arith.py')
-rw-r--r-- | examples/eval_arith.py | 195 |
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") |