-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcheck-gen-test-results.py
43 lines (35 loc) · 1.24 KB
/
check-gen-test-results.py
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
import sys
import enum
from typing_extensions import assert_never
class State(enum.Enum):
FRESH = 'FRESH'
EXPECTING_SAT = 'EXPECTING_SAT'
EXPECTING_UNSAT = 'EXPECTING_UNSAT'
s = State.FRESH
def check(s: State, i: int, line: str) -> State:
if s is State.FRESH:
if line == '"should be sat"' or line == 'should be sat':
return State.EXPECTING_SAT
elif line == '"should be unsat"' or line == 'should be unsat':
return State.EXPECTING_UNSAT
else:
raise ValueError(f"unknown content on line {i}, {line!r}")
elif s is State.EXPECTING_SAT:
if line == "sat":
return State.FRESH
if line == "unsat":
raise ValueError("got 'unsat' but expected 'sat'")
raise ValueError(f"unexpected content on line {i}, {line!r}")
elif s is State.EXPECTING_UNSAT:
if line == "unsat":
return State.FRESH
if line == "sat":
raise ValueError("got 'sat' but expected 'unsat'")
raise ValueError(f"unexpected content on line {i}, {line!r}")
else:
assert_never(s)
num_lines = 0
for i, line in enumerate(sys.stdin):
s = check(s, i, line.strip())
num_lines += 1
print(f'{num_lines // 2} tests passed')