1
0
Fork 0
This commit is contained in:
Arthur K. 2025-05-29 19:44:42 +03:00
parent 4c26e9f978
commit aa81b3ea0b
Signed by: wzray
GPG key ID: B97F30FDC4636357
6 changed files with 301244 additions and 0 deletions

57
sqrt/test.py Normal file
View file

@ -0,0 +1,57 @@
#!/usr/bin/env python3
import os
import subprocess
import sys
MAX_FAILED = 1
START_TEST = 0
TEMPFILE = subprocess.run("mktemp -u".split(), stdout=subprocess.PIPE).stdout.decode().strip() # use linux :)
FILL_SIZE = os.get_terminal_size().columns
filled = lambda x: f"{x}{' ' * (FILL_SIZE - len(x.replace('\r', '').replace('\n', '')))}"
with open("tests.csv") as f:
tests = [[y for y in x.split(',')] for x in f.read().strip().split('\n')[1:]][START_TEST:]
print('Compiling...', end='')
ps = subprocess.run(f'iverilog -g2012 -o {TEMPFILE} ./sqrt2_tb.sv'.split(), stderr=subprocess.PIPE)
exit_code = ps.returncode
output = ps.stderr.decode().strip()
if exit_code != 0:
print('\r!COMPILATION FAILED!')
print(output, file=sys.stderr)
exit(exit_code)
elif output:
print("\rCompiled with warnings")
print(output)
else:
print("\rCompiled successfully")
good = bad = 0
for i, test in enumerate(tests):
try:
ps = subprocess.run([TEMPFILE, '+' + test[0]], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=.1)
except subprocess.TimeoutExpired:
out = 'TIMEOUT'
else:
out = ps.stdout.decode().strip().split('\n')[0]
cmp = ' '.join(test[1:])
if out != cmp:
bad += 1
print('\n'.join((
filled(f'\rTEST #{i + 1 + START_TEST}' + (' (TIMEOUT)' if out == 'TIMEOUT' else '')),
filled(f'INPUT: {test[0]}'),
filled(f'OUTPUT: {out}'),
filled(f'EXPECTED: {cmp}'),
)), end='\n\n')
else:
good += 1
print(filled(f'\rGOOD: {good}, BAD: {bad}, TOTAL: {len(tests)}'), end='')
if MAX_FAILED and bad >= MAX_FAILED:
print("\nToo many failed tests. Aborting.")
exit(1)
print()

65537
sqrt/tests.csv Normal file

File diff suppressed because it is too large Load diff