main
John Lauer R0 engineering checkpoint: checked schematic, sourcing, servo evidence and safety-policy code; PCB and qualification incomplete 10054d3 1h ago
#include "../firmware/load_core.h"
#include <assert.h>
#include <math.h>
#include <stdio.h>
static load_sample good(uint32_t t){return (load_sample){.now_ms=t,.sample_ms=t,.last_tach_ms=t,.volts=5,.amps=0,.case_c=25,.sensors_valid=true,.hw_ok=true,.latch_q=true,.assembly_qualified=true};}
int main(void){
 load_core c;load_init(&c,0);load_sample s=good(0);
 assert(!c.enable&&c.dac_code==0);
 assert(!load_set_current(&c,NAN));assert(!load_set_current(&c,INFINITY));assert(!load_set_current(&c,3.01f));assert(!load_set_current(&c,-1));
 s.assembly_qualified=false;assert(!load_arm(&c,&s));s.assembly_qualified=true;
 assert(load_set_current(&c,3));assert(load_arm(&c,&s));
 for(unsigned t=10;t<=1000;t+=10){s=good(t);load_heartbeat(&c,t);load_tick(&c,&s);}
 assert(c.applied_a<=1.001f&&c.applied_a>.99f); /* 5W bring-up ceiling */
 s=good(1010);s.volts=24;load_tick(&c,&s);assert(c.applied_a<=5.0f/24);
 s=good(1020);s.hw_ok=false;load_tick(&c,&s);assert(c.state==LOAD_FAULT&&!c.enable&&!c.dac_code);
 s=good(1030);load_tick(&c,&s);assert(c.state==LOAD_FAULT);assert(!load_clear_fault(&c,&s));
 s.latch_q=false;assert(load_clear_fault(&c,&s));assert(c.state==LOAD_OFF);
 assert(load_arm(&c,&s));s=good(1040);s.sample_ms=900;load_tick(&c,&s);assert(c.faults&F_SENSOR);
 load_init(&c,0);s=good(0);assert(load_arm(&c,&s));s=good(10);s.case_c=NAN;load_tick(&c,&s);assert(c.faults&F_SENSOR);
 load_init(&c,0);s=good(0);assert(load_arm(&c,&s));s=good(1001);load_tick(&c,&s);assert(c.faults&F_LINK);
 load_init(&c,UINT32_MAX-10);s=good(UINT32_MAX-10);assert(load_arm(&c,&s));s=good(5);load_tick(&c,&s);assert(c.state==LOAD_RUNNING); /* clock wrap */
 load_init(&c,0);s=good(0);assert(load_arm(&c,&s));
 for(unsigned t=10;t<=260;t+=10){s=good(t);s.last_tach_ms=0;load_tick(&c,&s);}assert(c.faults&F_FAN);
 load_init(&c,0);s=good(0);assert(load_arm(&c,&s));s=good(10);s.case_c=55;load_tick(&c,&s);assert(c.faults&F_THERMAL);
 load_init(&c,0);s=good(0);assert(load_arm(&c,&s));s=good(10);load_tick(&c,&s);s=good(20);s.latch_q=false;load_tick(&c,&s);assert(c.faults&F_HARDWARE);
 load_init(&c,0);
 load_off(&c);assert(c.state==LOAD_OFF&&!c.enable&&c.requested_a==0);
 puts("load_core: safety policy tests passed (host C build; no MCU/HAL validation)");
}