from pathlib import Path
import subprocess
R=Path(__file__).resolve().parent;C=R/'firmware/固件/lamp_control';O=R/'fault_host_test';O.mkdir(exist_ok=True)
s=(C/'pca9956b_fault_monitor.c').read_text()
flags=['cc','-std=c11','-Wall','-Wextra','-Werror','-pedantic','-g','-fsanitize=address,undefined','-I'+str(C)]
for name,src in [('actual',s),('reversed_open_short',s.replace('if(code==1u)','if(code==2u)').replace('else if(code==2u)','else if(code==1u)'))]:
 p=O/(name+'.c');p.write_text(src);exe=O/name
 subprocess.run(flags+[str(p),str(R/'test_fault_monitor.c'),'-o',str(exe)],check=True)
 x=subprocess.run([str(exe)],capture_output=True,text=True);(R/(name+'_fault_test.log')).write_text(x.stdout+x.stderr)
 if name=='actual':assert x.returncode==0,x.stderr;print(x.stdout)
 else:assert x.returncode!=0 and 's.short_mask' in x.stderr,x.stderr;print('PASS: synthetic reversed open/short decoder rejected')
