#ifdef ADEQUEHNAME #include ADEQUEHNAME #else #include "adeque.h" #endif #ifdef DEQUEHNAME #include DEQUEHNAME #else #include "deque.h" #endif #include // prototypes void test1(); void test2(); void test3(); void test4(); void test5(); void test6(); void test7(); void test8(); void test9(); void test10(); void test11(); void test12(); const int numtests = 12; void (*testfns[numtests])() = { test1, test2, test3, test4, test5, test6, test7, test8, test9, test10, test11, test12 }; void printintDeque(ADeque * const ad) { int len = ad->Size(); for (int i=0; i < len; i++) { cout << (*ad)[i] << " "; } cout << endl; } void printconstintDeque(const ADeque * const ad) { int len = ad->Size(); for (int i=0; i < len; i++) { cout << (*ad)[i] << " "; } cout << endl; } void printstringDeque(ADeque * const ad) { int len = ad->Size(); for (int i=0; i < len; i++) { cout << (*ad)[i] << " "; } cout << endl; } int main(int argc, char *argv[]) { int i; if (argc > 1) { for (int argnum=1; argnum < argc; argnum++) { cout << endl; int testnum = atoi(argv[argnum]); if (testnum > numtests || testnum < 1) { cout << testnum << " is not a valid test number." << endl; continue; } cout << "================================================" << endl; testfns[atoi(argv[argnum]) - 1](); } } else { for (i=1; i<=numtests; i++) { cout << endl; cout << "================================================" << endl; testfns[i - 1](); } } } void test1() { cout << "TEST 1 -- appending 100 ints to the deque" << endl; ADeque * intdeq = new Deque(); int i; for (i=99; i>=0; i--) { intdeq->Append(i); } cout << "Should have the numbers 99 descending to 0:" << endl; printintDeque(intdeq); for (i=0; i<100; i++) { if ((*intdeq)[i] != 99-i) { cout << "*** Seems to be a problem at element " << i << endl; break; } } if (intdeq->Size() != 100) { cout << endl; cout << "*** Size() is not 100?" < * intdeq = new Deque(); int i; for (i=99; i>=0; i--) { intdeq->Prepend(i); } cout << "Should have the numbers 0 ascending to 99:" << endl; printintDeque(intdeq); for (i=0; i<100; i++) { if ((*intdeq)[i] != i) { cout << "*** Seems to be a problem at element " << i << endl; break; } } if (intdeq->Size() != 100) { cout << endl; cout << "*** Size() is not 100?" < *intdeq = new Deque(); int i; for (i=0; i<100; i++) { if (i % 2) { intdeq->Append(i); } else { intdeq->Prepend(i); } } cout << "Should have descending even numbers, then ascending odd numbers" << endl; printintDeque(intdeq); for (i=0; i<100; i++) { if ((*intdeq)[i] != abs(i-49) * 2 - ((i>=50)?1:0)) { cout << "*** Seems to be a problem at element " << i << endl; cout << " it should be " << abs(i-49) * 2 - ((i>=50)?1:0) << endl; } } if (intdeq->Size() != 100) { cout << endl; cout << "*** Size() is not 100?" < *stringdeq = new Deque(); int i; for (i=0; i<100; i++) { if (i % 2) { stringdeq->Append(itoa(i)); } else { stringdeq->Prepend(itoa(i)); } } cout << "Should have descending even numbers, then ascending odd numbers" << endl; printstringDeque(stringdeq); for (i=0; i<100; i++) { if (atoi((*stringdeq)[i]) != abs(i-49) * 2 - ((i>=50)?1:0)) { cout << "*** Seems to be a problem at element " << i << endl; cout << " it should be " << abs(i-49) * 2 - ((i>=50)?1:0) << endl; } } if (stringdeq->Size() != 100) { cout << endl; cout << "*** Size() is not 100?" < * intdeq = new Deque(); int i; for (i=99; i>=0; i--) { intdeq->Append(i); } cout << "(Append) Should have the numbers 99 to 0:" << endl; printintDeque(intdeq); for (i=0; i<100; i++) { intdeq->Insert(i*2, i); } cout <Size() != 200) { cout << endl; cout << "*** Size() is not 200?" < * intdeq = new Deque(); int i; for (i=99; i>=0; i--) { intdeq->Append(i); } cout << "Should have the numbers 99 descending to 0:" << endl; printintDeque(intdeq); for (i=1; i<100; i+=2) { (*intdeq)[i] = 100; } cout <Size() != 100) { cout << endl; cout << "*** Size() is not 100?" < * intdeq = new Deque(); int i; for (i=99; i>=0; i--) { intdeq->Append(i); } cout << "Should have the numbers 99 descending to 0 (uses const indexing):" << endl; printconstintDeque(intdeq); ADeque * const constintdeq = intdeq; for (i=0; i<100; i++) { if ((*constintdeq)[i] != 99-i) { cout << "*** Seems to be a problem at element " << i << endl; break; } } if (intdeq->Size() != 100) { cout << endl; cout << "*** Size() is not 100?" < *intdeq = new Deque(); int i; for (i=0; i<100; i++) { if (i % 2) { intdeq->Append(i); } else { intdeq->Prepend(i); } } cout << "Should have descending even numbers, then ascending odd numbers" << endl; printintDeque(intdeq); for (i=0; i<50; i++) { if (i % 2) { intdeq->Poplast(); } else { intdeq->Popfirst(); } } cout <=25)?1:0)) { cout << "*** Seems to be a problem at element " << i << endl; cout << " it should be " << abs(i-49) * 2 - ((i>=50)?1:0) << endl; } } if (intdeq->Size() != 50) { cout << endl; cout << "*** Size() is not 50?" < * intdeq = new Deque(); int i; for (i=99; i>=0; i--) { intdeq->Append(i); } cout << "Should have the numbers 99 descending to 0:" << endl; printintDeque(intdeq); for (i=0; i<100; i++) { if ((*intdeq)[i] != 99-i) { cout << "*** Seems to be a problem at element " << i << endl; break; } } cout << endl; cout << "Destructing..." << endl; delete intdeq; cout << endl; } void test10() { cout << "TEST 10 -- Stress test!" << endl; cout << "If this test breaks, check the code for deque-growing problems" << endl; for (int num = 100; num < 1000000; num *= 10) { cout << endl; cout << "appending and prepending " << num << " ints to the deque" << endl; ADeque *intdeq = new Deque(); int i; for (i=0; iAppend(i); } else { intdeq->Prepend(i); } } for (i=0; i=num/2)?1:0)) { cout << "*** Seems to be a problem at element " << i << endl; cout << " it should be " << abs(i-(num/2 - 1)) * 2 - ((i>=num/2)?1:0) << endl; break; } } if (intdeq->Size() != num) { cout << endl; cout << "*** Size() is not " << num << "?" < * intdeq = new Deque(); int i; for (i=99; i>=0; i--) { intdeq->Append(i); } cout << "First deque:" << endl; printintDeque(intdeq); Deque * intdeq2 = new Deque(*intdeq); cout << "Second deque (should be the same):" << endl; printintDeque(intdeq2); if (intdeq2->Size() != 100) { cout << endl; cout << "*** Size() is not 100?" < * intdeq = new Deque(); int i; for (i=99; i>=0; i--) { intdeq->Append(i); } cout << "First deque:" << endl; printintDeque(intdeq); Deque intdeq2 = (*intdeq); delete intdeq; cout << "Second deque (should be the same):" << endl; printintDeque(&intdeq2); if (intdeq2.Size() != 100) { cout << endl; cout << "*** Size() is not 100?" <