#include "lamp_bench_capture.h"
#include <assert.h>
#include <stdio.h>
#include <string.h>
int main(void) {
 lamp_bench_capture r; unsigned cases=0;
 lamp_adc_frame f={2048,2000,1000,1500,100,105,1};
 for(unsigned n=0;n<4096;++n) {
  f.ntc_raw=n;lamp_adc_frame copy=f;lamp_measurement m={0};
  assert(lamp_measurement_from_frame(&f,1500,110,&m)==LAMP_MEAS_OK);
  lamp_bench_capture_make(&f,1500,110,15,63,&r);
  assert(r.version==1&&r.captured_ms==110&&r.adc_available==1);
  assert(r.ntc_raw==n&&r.adc_sequence==1&&r.input_available_bits==15&&r.input_bits==63);
  assert(r.measurement_status==LAMP_MEAS_OK&&r.physical_calibration_verified==0);
  assert(r.nominal_ntc_ohm==m.nominal_ntc_ohm&&r.quality_flags==m.quality_flags);
  assert(r.nominal_led_uv==m.nominal_led_uv&&r.nominal_led_current_ua==m.nominal_led_current_ua);
  assert(memcmp(&f,&copy,sizeof f)==0);++cases;
 }
 for(unsigned i=0;i<7;++i) {
  f=(lamp_adc_frame){2048,2000,1000,1500,100,105,1};
  uint16_t cal=1500;uint32_t now=110;
  if(i==0)cal=0;if(i==1)f.vrefint_raw=0;if(i==2)f.led_i_raw=4095;
  if(i==3)f.sequence=0;if(i==4)now=121;if(i==5)f.completed_ms=99;
  if(i==6)f.vrefint_raw=1000;
  memset(&r,0xff,sizeof r);lamp_bench_capture_make(&f,cal,now,0,0,&r);
  assert(r.adc_available==1&&r.measurement_status!=LAMP_MEAS_OK);
  assert(r.nominal_led_uv==0&&r.nominal_led_current_ua==0&&r.quality_flags==0);
  assert(r.physical_calibration_verified==0);++cases;
 }
 memset(&r,0xff,sizeof r);lamp_bench_capture_make(NULL,1500,100,0,0,&r);
 assert(r.adc_available==0&&r.adc_sequence==0&&r.ntc_raw==0&&r.nominal_led_uv==0);
 assert(r.measurement_status==LAMP_MEAS_STALE&&r.physical_calibration_verified==0);++cases;
 f=(lamp_adc_frame){2048,2000,1000,1500,UINT32_MAX-3,1,2};
 lamp_bench_capture_make(&f,1500,4,15,2,&r);assert(r.measurement_status==LAMP_MEAS_OK);++cases;
 lamp_bench_capture_make(&f,1500,UINT32_MAX-4,15,2,&r);
 assert(r.measurement_status==LAMP_MEAS_STALE);++cases;
 lamp_bench_capture_make(NULL,0,0,0,0,NULL);++cases;
 printf("%u BENCH CAPTURE CASES PASS\n",cases);
}
