#include "panel_keys.h"
#include <assert.h>
#include <stdio.h>
int main(void){
 pk_decoder s;pk_output o;pk_init(&s);
 assert(!pk_step(&s,4095,true,0).valid);assert(!pk_step(&s,4095,true,19).valid);
 o=pk_step(&s,4095,true,20);assert(o.valid&&!o.plus&&!o.minus);
 assert(!pk_step(&s,1668,true,21).valid);o=pk_step(&s,1668,true,41);assert(o.valid&&o.plus&&o.minus);
 assert(!pk_step(&s,2048,true,42).valid);assert(!pk_step(&s,1668,true,43).valid);
 assert(!pk_step(&s,2048,true,44).valid);o=pk_step(&s,2048,true,64);assert(o.valid&&o.plus&&!o.minus);
 assert(!pk_step(&s,2048,false,65).valid);assert(!pk_step(&s,2048,true,66).valid);
 assert(pk_step(&s,2048,true,86).valid);assert(!pk_step(&s,2048,true,187).valid);
 assert(!pk_step(&s,2300,true,188).valid);assert(!pk_step(&s,5000,true,189).valid);
 pk_init(&s);assert(!pk_step(&s,2815,true,UINT32_MAX-10u).valid);
 o=pk_step(&s,2815,true,9u);assert(o.valid&&!o.plus&&o.minus);
 /* Every possible raw ADC code maps to at most one category. */
 unsigned count[5]={0};for(unsigned v=0;v<=65535u;v++)++count[pk_classify((uint16_t)v)];
 assert(count[PK_NONE]==246&&count[PK_PLUS]==301&&count[PK_MINUS]==321&&count[PK_BOTH]==271);
 puts("PASS: stable none/plus/minus/both, debounce transitions, invalid ADC immediate rejection, gap requalification, clock wrap, exhaustive uint16 classification");
}
