/**** * * Implementation of rolodex-test.h. * */ #include "rolodex-test.h" #include #ifndef HP700 #include #endif RolodexTest::RolodexTest() { } RolodexTest::~RolodexTest() { } void RolodexTest::Run() { Phase1(); Phase2(); Phase3(); Phase4(); Phase5(); Phase6(); Phase7(); } void RolodexTest::Phase1() { DumpPhaseHeader(1); TestRolodex(); TestTildaRolodex(); DumpPhaseEndSpacing(); } void RolodexTest::Phase2() { int i; // Loop var DumpPhaseHeader(2); /* * Construct 5 empty rolodexes for storing phase 2 results. */ for (i = 0; i < 5; i++) { rs[i] = new Rolodex(); } /* * Call TestAdd. */ TestAdd(); DumpPhaseEndSpacing(); } void RolodexTest::Phase3() { DumpPhaseHeader(3); TestPrint(); DumpPhaseEndSpacing(); } void RolodexTest::Phase4() { DumpPhaseHeader(4); TestDelete(); TestChange(); TestFind(); DumpPhaseEndSpacing(); } void RolodexTest::Phase5() { DumpPhaseHeader(5); TestAddDeleteSeries(); DumpPhaseEndSpacing(); } void RolodexTest::Phase6() { DumpPhaseHeader(6); Phase1(); Phase2(); Phase3(); Phase4(); Phase5(); DumpPhaseEndSpacing(); } void RolodexTest::Phase7() { DumpPhaseHeader(7); StressTest(); DumpPhaseEndSpacing(); } void RolodexTest::TestRolodex() { DumpUnitTestHeader("Constructor"); DumpUnitTestEndSpacing(); rs[0] = new Rolodex(); } void RolodexTest::TestTildaRolodex() { DumpUnitTestHeader("Destructor"); delete rs[0]; DumpUnitTestEndSpacing(); } void RolodexTest::TestAdd() { DumpUnitTestHeader("Add"); TestAdd1(); Dump(0, "Dump of a 1 element rolodex should follow"); TestAdd2(); Dump(1, "Dump of a 2 element rolodex should follow"); TestAdd10(); Dump(2, "Dump of a 10 element rolodex should follow"); TestAdd100(); Dump(3, "Dump of a 100 element rolodex should follow"); TestAdd1000(); Dump(4, "Dump of a 1000 element rolodex should follow"); DumpUnitTestEndSpacing(); } void RolodexTest::TestAddNoDump() { TestAdd1(); TestAdd2(); TestAdd10(); TestAdd100(); TestAdd1000(); } void RolodexTest::TestAdd1() { rs[0]->Add(new Card( new String("N1"), // Name 111111111, // Id 1, // Age Male, // Sex new String("1 One Street") // Address )); } void RolodexTest::TestAdd2() { rs[1]->Add(new Card( new String("N1"), // Name 111111111, // Id 1, // Age Male, // Sex new String("1 One Street") // Address )); rs[1]->Add(new Card( new String("N2"), // Name 222222222, // Id 2, // Age Female, // Sex new String("2 Two Street") // Address )); } void RolodexTest::TestAdd10() { AddCards(rs[2], 10); } void RolodexTest::TestAdd100() { AddCards(rs[3], 100); } void RolodexTest::TestAdd1000() { AddCards(rs[4], 1000); } void RolodexTest::AddCards(Rolodex* r, int n) { int i; // Loop var char nbuf[50]; // Temp for name char abuf[50]; // Temp for age Sex s; // Temp for sex char adbuf[50]; // Temp for address for (i = 1; i <= n; i++) { sprintf(nbuf, "N%d", i); sprintf(adbuf, "%d %d %d", i, i, i); r->Add(new Card( new String(nbuf), // Name 100000000 + i, // Id i % 201, // Age i % 2 ? Male : Female, // Sex new String(adbuf) // Address )); } } void RolodexTest::TestPrint() { int i; // Loop var DumpUnitTestHeader("Print"); for (i = 0; i < 5; i++) { rs[i]->Print(); } DumpUnitTestEndSpacing(); } void RolodexTest::TestDelete() { DumpUnitTestHeader("Delete"); TestDeleteForward(); Dump("Dump of 5 empty rololdexes should follow"); TestAddNoDump(); TestDeleteBackward(); Dump("Dump of 5 empty rololdexes should follow"); TestAddNoDump(); TestDeleteRandom(); Dump("Dump of 5 empty rololdexes should follow"); DumpUnitTestEndSpacing(); } void RolodexTest::TestDeleteForward() { int i; // Loop var try { rs[0]->Delete(111111111); rs[1]->Delete(111111111); rs[1]->Delete(222222222); for (i = 100000001; i <= 100001000; i++) { if (i <= 100000010) { rs[2]->Delete(i); } if (i <= 100000100) { rs[3]->Delete(i); } rs[4]->Delete(i); } } catch (DeleteInputError* die) { printf("RolodexTest::TestDeleteForward aborted "); printf("on thrown exception from Rolodex::Delete\n"); } } void RolodexTest::TestDeleteBackward() { int i; // Loop var for (i = 100001000; i >= 100000001; i--) { rs[4]->Delete(i); if (i <= 100000100) { rs[3]->Delete(i); } if (i <= 100000010) { rs[2]->Delete(i); } } rs[1]->Delete(222222222); rs[1]->Delete(111111111); rs[0]->Delete(111111111); } \&. . . void RolodexTest::DumpPhaseHeader(int phasenum) { printf("**** Rolodex Testing Phase %d ****\n", phasenum); } void RolodexTest::DumpUnitTestHeader(char* testname) { printf("** Rolodex Unit Test %s **\n", testname); } void RolodexTest::DumpPhaseEndSpacing() { printf("\n\n\n"); } void RolodexTest::DumpUnitTestEndSpacing() { printf("\n\n"); } void RolodexTest::Dump(int i, char* message) { int l; // Temp if (message) { printf("* %s *\n", message); } printf("Contents of test rolodex number %d (contains %d %s):\n", i, l = ((RolodexTest*)rs[i])->cl->Len(), l != 1 ? "cards" : "card"); rs[i]->Dump(); printf("\n"); } void RolodexTest::Dump(char* message) { int i; // Loop var if (message) { printf("* %s *\n", message); } for (i = 0; i < 5; i++) { Dump(i); } }