1
0
Fork 0
forked from hanez/xtc
xtc/tests/tools/test_benchmark.py

51 lines
2.1 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""Verify benchmark gates without depending on noisy real-machine timings."""
import json
from pathlib import Path
import subprocess
import sys
import tempfile
with tempfile.TemporaryDirectory(prefix='xtc-benchmark-') as directory:
root = Path(directory)
binary = root / 'measurement'
binary.write_text('''#!/usr/bin/env python3
import json, sys
nodes, channels, rate, frames, blocks = map(int, sys.argv[1:])
print(json.dumps(dict(nodes=nodes, channels=channels, rate=rate, frames=frames,
blocks=blocks, mean_us=10, p99_us=12, deadline_misses=0,
process_cpu_ms=1, peak_rss_kib=1024)))
''')
binary.chmod(0o700)
report, baseline = root / 'report.json', root / 'baseline.json'
command = [sys.executable, 'tools/benchmark.py', '--binary', str(binary),
'--output', str(report)]
def run(arguments, success, message=None):
result = subprocess.run(arguments, capture_output=True, text=True, timeout=30)
assert (result.returncode == 0) == success, result.stdout + result.stderr
if message:
assert message in result.stdout + result.stderr
run(command, True)
original = json.loads(report.read_text())
baseline.write_text(json.dumps(original))
compare = command + ['--baseline', str(baseline)]
run(compare, True)
changed = json.loads(json.dumps(original))
changed['cases'][0]['mean_us'] = 1
baseline.write_text(json.dumps(changed))
run(compare, False, 'exceeds')
changed = json.loads(json.dumps(original))
changed['cases'].pop()
baseline.write_text(json.dumps(changed))
run(compare, False, 'missing baseline case')
changed = json.loads(json.dumps(original))
changed['context']['flags'] = 'incompatible'
baseline.write_text(json.dumps(changed))
run(compare, False, 'mismatch')
changed = json.loads(json.dumps(original))
changed['context']['workload'] = 'project'
baseline.write_text(json.dumps(changed))
run(compare, False, 'workload mismatch')
print('Benchmark matching, regression, missing-case and context gates passed.')