-
Notifications
You must be signed in to change notification settings - Fork 1
/
test.py
51 lines (38 loc) · 1.68 KB
/
test.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
44
45
46
47
48
49
50
51
from code_gen import CodeGen
from scanner.default_scanner import build_scanner
from tables import tables
from Parser.parser import LL1
from Parser.grammar import init_grammar
import logging
grammer = init_grammar()
def main():
number_of_tests = 10
test_passes = True
status = ""
logger = logging.getLogger()
logger.setLevel(logging.INFO)
for i in range(1, number_of_tests + 1, 1):
prefix = f"tests/parser/samples/T{i}/"
sc = build_scanner(f"{prefix}input.txt")
parser = LL1(sc, grammer, CodeGen())
tables.get_token_table().tokens = []
tables.get_symbol_table().clear()
tables.get_error_table().parse_trees = []
parser.generate_parse_tree()
parser.export_parse_tree('parse_tree.txt')
parser.export_syntax_error('syntax_errors.txt')
logger.warning(f"test no.{i}:")
logger.warning(
f"\tparse_tree.txt:\t{open('parse_tree.txt').read().strip() == open(f'{prefix}parse_tree.txt').read().strip()}")
logger.warning(
f"\tsyntax_errors.txt:\t{open('syntax_errors.txt').read().strip().lower() == open(f'{prefix}syntax_errors.txt').read().strip().lower()}")
test_status = open('parse_tree.txt').read().strip() == open(
f'{prefix}parse_tree.txt').read().strip() and open('syntax_errors.txt').read().strip().lower() == open(
f'{prefix}syntax_errors.txt').read().strip().lower()
test_passes = test_passes and test_status
status += ("F", ".")[test_status]
logger.warning("".ljust(60, "="))
logger.warning(status)
logger.warning(("test failed", "test was successful!")[test_passes])
if __name__ == "__main__":
main()