main
matt Add MTA-156 input revision and document enclosure and cable-fit limits 16485bb
#include "control_policy.h"
#include <cassert>
#include <limits>
int main(){
 using fan_controller::decide;
 auto base=[](float t){return decide(t,1000,30000,1000,1000,true,false);};
 assert(base(20).duty==.35f && !base(20).fault);
 assert(std::abs(base(32.5).duty-.675f)<1e-5);
 assert(base(40).duty==1 && base(70).duty==1);
 assert(decide(20,15001,30000,1000,1000,true,false).fault);
 assert(decide(20,1000,30000,0,1000,true,false).duty==1);
 assert(decide(20,1000,30000,1000,0,true,false).fault);
 assert(decide(20,1000,30000,1000,1000,false,false).duty==1);
 assert(base(std::numeric_limits<float>::quiet_NaN()).duty==1);
 assert(base(-127).fault && base(101).fault);
 assert(decide(20,1000,5000,0,0,true,false).duty==1);
 assert(decide(20,1000,30000,1000,1000,true,true).duty==1);
 // Unsigned timestamp subtraction remains valid through millis() rollover.
 uint32_t age=uint32_t(500)-uint32_t(0xfffffe0c);assert(age==1000);
 assert(!decide(20,age,30000,1000,1000,true,false).fault);
}