49 lines
2.3 KiB
C
49 lines
2.3 KiB
C
#include <assert.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#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;k<j;++k)assert(options[k]!=options[j]);}
|
|
assert(p==1);if(seed>1 && 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;
|
|
}
|