#include "../HomeCoreMonitor/MotionLight.h"
#include <cassert>
#include <cstdio>
int main(){
 MotionLight m;
 assert(m.tick(59000,true)==0 && !m.ready);
 assert(m.tick(60000,true)==0 && m.ready);
 assert(m.tick(61000,true)>=127 && m.value<=128);
 assert(m.tick(62000,true)==255);
 assert(m.tick(91999,false)==255);
 assert(m.tick(92000,false)==255);
 assert(m.tick(93000,false)>=127 && m.value<=128);
 auto mid=m.value;m.tick(93000,true);assert(m.value==mid);
 assert(m.tick(95000,true)==255);
 m.networkLost(96000);assert(m.tick(96000,true)==255 && m.automatic);
 m.manual(false,96000);assert(m.tick(98000,true)==0 && !m.automatic && m.motion);
 m.manual(true,98000);assert(m.tick(100000,false)==255);
 m.networkLost(100001);assert(m.value==0);
 m.configure(true,30000,2000,128,100002);assert(m.tick(100002,false)==0);
 m.tick(100003,true);assert(m.tick(102003,true)==128);
 assert(m.tick(132003,false)==128);assert(m.tick(134003,false)==0);
 MotionLight wrap(0xffff0000u);wrap.tick(uint32_t(0xffff0000u+60000),true);
 assert(wrap.tick(uint32_t(0xffff0000u+62000),true)==255);
 assert(wrap.tick(uint32_t(0xffff0000u+94000),false)==255);
 assert(wrap.tick(uint32_t(0xffff0000u+96000),false)==0);
 puts("PASS warmup, fade, hold, retrigger, offline auto, manual priority, settings, millis rollover");
}
