-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathformula-parser-tests.py
More file actions
101 lines (86 loc) · 2.73 KB
/
formula-parser-tests.py
File metadata and controls
101 lines (86 loc) · 2.73 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
93
94
95
96
97
98
99
100
101
from stv.parsers import FormulaParser
def testEval(formula, varValues, expected):
print(" using", varValues, "and expecting", expected)
evaluated = formula.expression.evaluate(varValues)
print(" evaluated to", evaluated)
assert evaluated == expected
fp = FormulaParser()
fs = "<<X,YYY>>F(A&B&C&D&EFG)"
print("Test #1: parsing '" + fs + "':")
f = fp.parseAtlFormula(fs)
print(f)
assert str(f) == "<<X, YYY>>F(A & (B & (C & (D & EFG))))"
print()
fs = "<<X,YYY>>G(A|B|C|D|EFG)"
print("Test #2: parsing '" + fs + "':")
f = fp.parseAtlFormula(fs)
print(f)
assert str(f) == "<<X, YYY>>G(A | (B | (C | (D | EFG))))"
print()
fs = "<<X,YYY>>F(A&B|C|D|E&F&G|H)"
print("Test #3: parsing '" + fs + "':")
f = fp.parseAtlFormula(fs)
print(f)
assert str(f) == "<<X, YYY>>F((A & B) | (C | (D | ((E & (F & G)) | H))))"
print()
fs = "<<X,YYY>>F(A & (B|C) | D | E & F & G | H)"
print("Test #4: parsing '" + fs + "':")
f = fp.parseAtlFormula(fs)
print(f)
assert str(f) == "<<X, YYY>>F((A & (B | C)) | (D | ((E & (F & G)) | H)))"
print()
fs = "<<X,YYY>>F(A&!B|C!=2&(AAA=BBB&CX)&A=3)"
print("Test #5: parsing '" + fs + "':")
f = fp.parseAtlFormula(fs)
print(f)
assert str(f) == "<<X, YYY>>F((A & !B) | ((C != 2) & (((AAA = BBB) & CX) & (A = 3))))"
print()
fs = "<<X>>F(A&B)"
print("Test #6: parsing & evaluating '" + fs + "'")
f = fp.parseAtlFormula(fs)
print(f)
assert str(f) == "<<X>>F(A & B)"
testEval(f, {"A": 1, "B": 0}, False)
testEval(f, {"A": 1, "B": 1}, True)
testEval(f, {"A": 0, "B": 0}, False)
print()
fs = "<<X>>F(A|B&C)"
print("Test #7: parsing & evaluating '" + fs + "'")
f = fp.parseAtlFormula(fs)
print(f)
assert str(f) == "<<X>>F(A | (B & C))"
print("using: A=1, B=1, C=1")
testEval(f, {"A": 1, "B": 1, "C": 1}, True)
testEval(f, {"A": 0, "B": 1, "C": 1}, True)
testEval(f, {"A": 0, "B": 0, "C": 1}, False)
testEval(f, {"A": 1, "B": 0, "C": 1}, True)
print()
fs = "<<X>>F(A=3)"
print("Test #8: parsing & evaluating '" + fs + "'")
f = fp.parseAtlFormula(fs)
print(f)
assert str(f) == "<<X>>F(A = 3)"
testEval(f, {"A": 1}, False)
testEval(f, {"A": 3}, True)
testEval(f, {"A": 33}, False)
print()
fs = "<<X>>F(A!=test)"
print("Test #9: parsing & evaluating '" + fs + "'")
f = fp.parseAtlFormula(fs)
print(f)
assert str(f) == "<<X>>F(A != test)"
testEval(f, {"A": "blah"}, True)
testEval(f, {"A": "test"}, False)
print()
fs = "<<X>>F(A&!B | C != test & D)"
print("Test #10: parsing & evaluating '" + fs + "'")
f = fp.parseAtlFormula(fs)
print(f)
assert str(f) == "<<X>>F((A & !B) | ((C != test) & D))"
testEval(f, {"A": 1, "B": 0, "C": "test", "D": 0}, True)
testEval(f, {"A": 1, "B": 1, "C": "test", "D": 0}, False)
testEval(f, {"A": 1, "B": 1, "C": "test", "D": 1}, False)
testEval(f, {"A": 1, "B": 1, "C": "xxxx", "D": 1}, True)
print()
print("OK")
print()