30 lines
2.1 KiB
Python
30 lines
2.1 KiB
Python
import datetime,importlib.util,json,os,pathlib,re,subprocess,sys,time
|
|
sys.dont_write_bytecode=True
|
|
r=pathlib.Path(__file__).resolve().parent;p=r.parent.parent
|
|
spec=importlib.util.spec_from_file_location('row276_driver',p/'driver.py');d=importlib.util.module_from_spec(spec);spec.loader.exec_module(d)
|
|
rows=[];start=time.monotonic()
|
|
print('HEAD',subprocess.check_output(['git','rev-parse','HEAD'],text=True).strip(),'manifest8f30c19a grant sage-3023',flush=True)
|
|
(r/'start.txt').write_text(datetime.datetime.now(datetime.timezone.utc).isoformat()+'\n')
|
|
for n in range(1,11):
|
|
for fault,lo,hi in [('inner',1.25,2.75),('outer',3.25,4.75)]:
|
|
name=f'{n}-{fault}';print('START',name,flush=True)
|
|
v=d.run(['node','--test','--test-reporter=tap','--test-name-pattern',f'row253 C4 P10 {fault} reason','packages/cli/tests/case1-accept.test.mjs'],r/(name+'.log'))
|
|
text=(r/(name+'.log')).read_text();diag=[]
|
|
for line in text.splitlines():
|
|
if line.startswith('# {'):
|
|
x=json.loads(line[2:])
|
|
if x.get('fault')==fault:
|
|
x['edge_distance']=min(x['probeSeconds']-lo,hi-x['probeSeconds']);diag.append(x)
|
|
v.update(repetition=n,fault=fault,modes=diag,wall_seconds=round(time.monotonic()-start,3))
|
|
rows.append(v);(r/'results.json').write_text(json.dumps(rows,indent=2)+'\n')
|
|
if v['timeout'] or v['code']!=0:raise RuntimeError('red or timeout: stop for Mos')
|
|
if sorted(x['mode'] for x in diag)!=['exec','hop']:raise RuntimeError('missing mode diagnostics: stop')
|
|
if any(x['edge_distance']<=0.25 for x in diag):raise RuntimeError('within0.25s edge: stop for Mos, no tuning')
|
|
print('END',name,json.dumps(diag),flush=True)
|
|
summary={}
|
|
for fault in ['inner','outer']:
|
|
for mode in ['exec','hop']:
|
|
ds=[d for row in rows if row['fault']==fault for d in row['modes'] if d['mode']==mode]
|
|
summary[fault+'-'+mode]=dict(count=len(ds),min=min(x['probeSeconds'] for x in ds),max=max(x['probeSeconds'] for x in ds),min_edge_distance=min(x['edge_distance'] for x in ds),max_baseline_seconds=max(x['baselineSeconds'] for x in ds))
|
|
(r/'summary.json').write_text(json.dumps(summary,indent=2)+'\n');print('PROOF COMPLETE',json.dumps(summary),flush=True)
|