-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenerate_testcases.py
More file actions
62 lines (51 loc) · 1.63 KB
/
Copy pathgenerate_testcases.py
File metadata and controls
62 lines (51 loc) · 1.63 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
import sys
import os
def extract_case_text(text):
out = []
buffer1 = ""
buffer2 = ""
state = 0
for line in text.splitlines(True):
if state == 1:
if "Wejście" in line:
state = 2
continue
elif state == 2:
if "Wyjście" in line:
state = 3
continue
buffer1 += line
elif state == 3:
if "Wejście" in line:
state = 2
out += [(''.join(c for c in buffer1 if c.isprintable() or c == '\n'),
''.join(c for c in buffer2 if c.isprintable() or c == '\n'))]
buffer1 = buffer2 = ""
continue
buffer2 += line
elif "Przykłady\n" in line:
state = 1
continue
return out
def generate_testcase(name, i, a, b):
with open(f"tests/{name+str(i)}.cpp", 'w') as file:
file.write('#include "tester/tester.h"\n')
file.write(f'#include "src/{name}-sol.c"\n')
file.write(f'// This file was autogenerated\n')
file.write('\nstatic test t("{}","{}");'.format(
repr(a.strip())[1:-1], repr(b.strip())[1:-1]))
def main():
if len(sys.argv) < 3:
print(f"Usage: {sys.argv[0]} <pdf file> <project name>")
return
filename = sys.argv[1]
name = sys.argv[2]
text = os.popen(f"pdfgrep . '{filename}'").read()
cases = extract_case_text(text)
if len(cases) == 0:
print("Found no cases")
for i, p in enumerate(cases):
a, b = p
generate_testcase(name, i, a, b)
if __name__ == "__main__":
main()