#!/bin/sh
set -eu
TASK_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
python3 - "$TASK_DIR" <<'PY'
from pathlib import Path
import subprocess,sys
r=Path(sys.argv[1]);d=r/'lamp_control';logs=[]
flags=['cc','-std=c11','-Wall','-Wextra','-Werror','-pedantic','-fsanitize=address,undefined','-g','-I'+str(d)]
for name in ['lamp_guard','lamp_program','lamp_ir']:
 sources=[d/'lamp_guard.c',d/('test_'+name+'.c')]
 if name=='lamp_program':sources.append(d/'lamp_program.c')
 out=r/('test_'+name);subprocess.run(flags+[str(x) for x in sources]+['-o',str(out)],check=True)
 p=subprocess.run([str(out)],capture_output=True,text=True,check=True);logs.append(p.stdout);print(p.stdout,end='')
(r/'tests.log').write_text(''.join(logs))
subprocess.run(flags+[str(r/'original_guard.c'),str(d/'test_lamp_ir.c'),'-o',str(r/'original_negative')],check=True)
p=subprocess.run([str(r/'original_negative')],capture_output=True,text=True);assert p.returncode!=0
(r/'negative_control.log').write_text('PASS: original guard fails independent IR absence assertion.\n'+p.stderr)
for n in ['lamp_guard','lamp_program']:
 subprocess.run(['arm-none-eabi-gcc','-mcpu=cortex-m0plus','-mthumb','-std=c11','-Os','-ffreestanding','-fno-builtin','-Wall','-Wextra','-Werror','-I'+str(d),'-I'+str(r/'target_include'),'-c',str(d/(n+'.c')),'-o',str(r/(n+'.o'))],check=True)
(r/'target_objects.log').write_text('PASS: Cortex-M0+ guard/program objects; NOT linked/flashed target image.\n')
print('PASS: original negative control; Cortex-M0+ object compile')
PY
