#include #include #include #include "quiz.h" static unsigned index_of(const char *code){unsigned i;for(i=0;i<50;++i)if(!strcmp(states[i].code,code))return i;assert(0);return 0;} int main(void) { unsigned seed,i,j,p,positions[4]={0},last[50],changes=0; char a[160],b[ANSWER_SIZE]; for(seed=1;seed<=2000;++seed){ unsigned seen[50]={0};quiz_start(seed); for(i=0;i<50;++i){ assert(order[i]<50);++seen[order[i]];quiz_options(order[i]);p=0; for(j=0;j<4;++j){unsigned k;assert(options[j]<50);if(options[j]==order[i]){++p;++positions[j];}for(k=0;k1 && last[i]!=order[i])++changes;last[i]=order[i]; } for(i=0;i<50;++i)assert(seen[i]==1); } for(i=0;i<4;++i)assert(positions[i]>20000); assert(changes>90000); for(i=0;i<50;++i){ assert(classify(i,states[i].capital)==2); strcpy(a,states[i].capital); for(j=0;a[j];++j)if(a[j]>='a' && a[j]<='z')a[j]-=32; assert(classify(i,a)==2); for(j=0;a[j];++j)if((j&1) && a[j]>='A' && a[j]<='Z')a[j]+=32; assert(classify(i,a)==2); for(j=0;j<50;++j)if(j!=i)assert(classify(i,states[j].capital)==0); } assert(classify(index_of("MN"),"St. Paul")==2); assert(classify(index_of("MN"),"st paul")==2); assert(classify(index_of("MN")," sAiNt PaUl ")==2); assert(classify(index_of("UT")," salt lake city ")==2); assert(classify(index_of("CO"),"Dnever")==1); assert(classify(index_of("AK"),"Juneu")==1); assert(classify(index_of("MA"),"Austin")==0); assert(classify(index_of("CO"),"")==0); memset(a,'x',159);a[159]=0;assert(classify(0,a)==0); normalize(" \t baton ROUGE \n ",b);assert(!strcmp(b,"baton rouge")); quiz_start(2709); for(i=0;i<50;++i){quiz_record(order[i],i%2?"wrong":states[order[i]].capital,!(i%2),!(i%4));quiz_record(order[i],"duplicate",1,1);} assert(score==25 && corrections==13); for(i=0;i<50;++i)assert(answered[i]==1); quiz_start(2710);assert(score==0 && corrections==0); for(i=0;i<50;++i)assert(!answered[i] && !responses[i][0]); printf("PASS: 2000 shuffles, 100000 option sets, all casing / known-wrong capitals, aliases, distance, bounds, scoring, reset.\n"); return 0; }