int checkRepeatExpression(char *expression) { Rewind(); char *first = nextToken(); char *second = nextToken(); char *third = nextToken(); char *fourth = nextToken(); char *fifth = nextToken(); if (checkREPEAT(first, strlength(first))&& checkN(second, strlength(second))&& checkTIMES(third, strlength(third))&& checkCommandList(fourth, strlength(fourth))&& checkEND(fifth, strlength(fifth))) { free(first); free(second); free(third); free(fourth); free(fifth); return 1; } else { free(first); free(second); free(third); free(fourth); free(fifth); return 0; } return 1; }
int isValidCommand(char *token){ int i=0; int size = strlength(token); return checkTURNOFF(token,size)|| checkTURNON(token,size)|| checkDETECTMARKER(token,size)|| checkDROP(token,size)|| checkPICKUP(token,size)|| checkRIGHT(token,size)|| checkLEFT(token,size)|| checkTAKEASTEP(token,size)|| checkREPEAT(token,size)|| checkWHILE(token,size)|| checkSAY(token,size)|| checkDO(token,size)|| checkN(token,size)|| checkMESSAGE(token,size)|| checkEND(token,size)|| checkNOT(token,size)|| checkTIMES(token,size); }
void mkTest() { printf(" Seller\n"); srand(0); Seller *s; s = createSeller(HIGH, 1); assert(checkT(s->price==HIGH,"Seller is HIGH")); assert(checkT(s->que==NULL,"Seller starts with empty que")); assert(checkN(s->lastRow,1,"HIGH seller starts in row 1")); free(s); s = createSeller(MEDIUM, 1); assert(checkN(s->lastRow,5,"MEDIUM seller starts in row 5")); free(s); s = createSeller(LOW, 1); assert(checkN(s->lastRow,10,"LOW seller starts in row 10")); printf(" Person\n"); Person *p = createPerson(s); assert(checkN(p->arrival,43,"p->arrival")); assert(checkT(s==p->seller,"checkT")); assert(checkT((p->next==p->prev) && (p->prev==p),"p is self referential")); // add person to seller // we need 4 people to test que management // for our testing set arrival to 0 and do not thread printf(" Add Person\n"); int i; for(i=0; i<4;i++) { p=createPerson(s); p->arrival = 0; addPerson(p); } assert(checkN(s->que->id,1,"First customer id")); assert(checkN(s->que->next->id,2,"Second customer id")); assert(checkN(s->que->next->next->id,3,"Third customer id")); assert(checkN(s->que->next->next->next->id,4,"Fourth/Last customer id")); assert(checkN(s->que->next->next->next->next->id,4,"Fifth customer id (tail points to self")); assert(checkT(s->que->inQ==TRUE,"First customer id")); assert(checkT(s->que->next->inQ==TRUE,"Second customer id")); assert(checkT(s->que->next->next->inQ==TRUE,"Third customer id")); assert(checkT(s->que->next->next->next->inQ==TRUE,"Fourth/Last customer id")); printf(" Remove Person\n"); // test removals p = removePerson(s->que);// remove person 1 assert(checkN(p->id,1,"First person on que removed")); assert(checkN(s->que->id,2,"First person on que now number 2")); p = removePerson(s->que->next); // remove person 3 assert(checkN(p->id,3,"Second(middle) person on que removed")); assert(checkN(s->que->id,2,"First person on que now number 2")); assert(checkN(s->que->next->id,4,"Second person should now be #4")); p = removePerson(s->que->next); // remove person 4 assert(checkN(p->id,4,"Second(tail) person on que removed")); assert(checkN(s->que->id,2,"First person on que now number 2")); assert(checkN(s->que->id,s->que->next->id,"Only one person left on que #2")); assert(checkT((p->next==p->prev) && (p->prev==p),"p(2) is self referential")); p = removePerson(s->que);// remove person 2 (single person left) assert(checkN(p->id,2,"Last person on que removed")); assert(checkT(s->que==NULL,"Seller que now empty")); p = removePerson(s->que);// remove person from empty que assert(checkT(p==NULL,"NULL pointer expected")); // printf(" getSeat()\n"); p=createPerson(s); // current low price seller p->id = 42; // check if row full algorithm even works assert(checkT(!isRowFull(&hall,8),"Is row 8 full NO")); printf(" LOW\n"); getSeat(&hall,p,LOW); // first call to low assigns 10,10 Person *cp = hall.seats[10][10]; assert(checkT(cp!=NULL,"Seat 10,10 occupied")); assert(checkN(cp->id,42,"Customer 42 has the seat")); printf(" HIGH\n"); p->seller->lastRow=1; getSeat(&hall,p,HIGH); // first call to low assigns 1,1 cp = hall.seats[1][1]; assert(checkT(cp!=NULL,"Seat 1,1 occupied")); assert(checkN(cp->id,42,"Customer 42 has the seat")); printf(" MEDIUM\n"); p->seller->lastRow=5; getSeat(&hall,p,MEDIUM); // first call to low assigns 5,10 cp = hall.seats[5][10]; assert(checkT(cp!=NULL,"Seat 5,10 occupied")); assert(checkN(cp->id,42,"Customer 42 has the seat")); p->seller->lastRow=3; getSeat(&hall,p,MEDIUM); // first call to low assigns 3,10 cp = hall.seats[3][10]; assert(checkT(cp!=NULL,"Seat 3,10 occupied")); assert(checkN(cp->id,42,"Customer 42 has the seat")); p->seller->lastRow=6; getSeat(&hall,p,MEDIUM); // first call to low assigns 6,1 cp = hall.seats[6][1]; assert(checkT(cp!=NULL,"Seat 6,1 occupied")); assert(checkN(cp->id,42,"Customer 42 has the seat")); // need non-threaded test for sellTickets method // non-threaded test for frustratedPerson() printf(" frustratedPerson()\n"); s = createSeller(HIGH,103); p=createPerson(s); p->arrival=0; addPerson(p); frustratedPerson(p); assert(checkT(s->que==NULL,"Person has left the building")); }