/**** * * Implmentation of strlist-test.h. * */ #include "strlist-test.h" #include #include main() { StrListTest* slt = new StrListTest(); slt->DoIt(); delete slt; } void StrListTest::DoIt() { DoItOnce(); DoSort(); DoItOnce(); DoSort(); } void StrListTest::DoItOnce() { StrList* sl = new StrList(); TestBasicConstructors(sl); TestFinds(sl); TestBasicSelectorsAndDestructor(sl); TestInserts(sl); StressTest(); } void StrListTest::TestBasicConstructors(StrList* sl) { int i; for (i=1; i<=10; i++) sl->Put(new StrListElem(Strify(i))); for (i=1; i<=10; i++) sl->Push(new StrListElem(Strify(i))); Dump(sl); } void StrListTest::TestFinds(StrList* sl) { StrListElem* ie; sl->Find("10")->Print(); printf(" "); sl->Find("1")->Print(); printf(" "); if ((ie = sl->Find("x"))) ie->Print(); else printf("null"); printf(" "); printf("%d %d %d\n", sl->FindPos("10"), sl->FindPos("1"), sl->FindPos("x")); } void StrListTest::TestBasicSelectorsAndDestructor(StrList* sl) { int i,len; printf("%s %s", sl->Pull()->GetData()->Convert(), sl->Pop()->GetData()->Convert()); printf("\n"); Dump(sl); sl->RemoveNth(1); sl->RemoveNth(sl->Len()); Dump(sl); sl->RemoveNth(8); sl->RemoveNth(8); Dump(sl); for (i=1, len=sl->Len(); i<=len+2; i++) sl->RemoveNth(2); Dump(sl); printf("%s\n", sl->RemoveNth(1)->GetData()->Convert()); Dump(sl); printf("%s\n", sl->RemoveNth(1)->GetData()->Convert()); printf("%s\n", sl->RemoveNth(1)->GetData()->Convert()); printf("%s\n", sl->Pull()->GetData()->Convert()); printf("%s\n", sl->Pop()->GetData()->Convert()); Dump(sl); } void StrListTest::TestInserts(StrList* sl) { int i; /* * Build a list with 1-9 in it. */ for (i=1; i<=9; i++) sl->Put(new StrListElem(Strify(i))); printf("\nPre-insert dump:\n"); Dump(sl, " "); sl->Insert(new StrListElem(Strify(-10000)), -10000); sl->Insert(new StrListElem(Strify(-1)), -1); sl->Insert(new StrListElem(Strify(sl->Len()+1)), sl->Len()+1); sl->Insert(new StrListElem(Strify(10000)), 10000); printf("\nDump after noop inserts (should be same as pre-insert):\n"); Dump(sl, " "); sl->Insert(new StrListElem("0"), 0); printf("\nDump after inserting 0 at pos 0:\n"); Dump(sl, " "); sl->Insert(new StrListElem("0.5"), 1); printf("\nDump after inserting 0.5 at pos 1:\n"); Dump(sl, " "); sl->Insert(new StrListElem("0.75"), 2); printf("\nDump after inserting 0.75 at pos 2:\n"); Dump(sl, " "); sl->Insert(new StrListElem("1.5"), 4); printf("\nDump after inserting 1.5 at pos 4:\n"); Dump(sl, " "); sl->Insert(new StrListElem("2.5"), 6); printf("\nDump after inserting 2.5 at pos 6:\n"); Dump(sl, " "); sl->Insert(new StrListElem("8.5"), sl->Len()-1); printf("\nDump after inserting 9.5 at pos sl->Len()-1:\n"); Dump(sl, " "); sl->Insert(new StrListElem("10"), sl->Len()); printf("\nDump after inserting 10 at pos sl->Len():\n"); Dump(sl, " "); printf("\n\n"); } void StrListTest::StressTest() { StrList* sl = new StrList(); int i; for (i=1; i<=100000; i++) sl->Put(new StrListElem(Strify(i))); printf("Last in 100,000-elem list: %s\n\n", sl->GetNth(sl->Len())->GetData()->ConstConvert()); printf("Last in 100,001-elem list: %s\n\n", ((StrListElem*) sl->Insert(new StrListElem("xx"), sl->Len())-> GetNth(sl->Len()))->GetData()->ConstConvert()); printf("Middle in 100,002-elem list: %s\n\n", ((StrListElem*) sl->Insert(new StrListElem("yy"), sl->Len()/2)-> GetNth(sl->Len()/2))->GetData()->ConstConvert()); printf("Middle in 100,003-elem list: %s\n\n", ((StrListElem*) sl->Insert(new StrListElem("zz"), sl->Len()/2)-> GetNth(sl->Len()/2))->GetData()->ConstConvert()); printf("Middle+1 in 100,003-elem list: %s\n\n", sl->GetNth(sl->Len()/2 + 1)->GetData()->ConstConvert()); delete sl; } void StrListTest::DoSort() { StrList* sl = new StrList(); StrList* sl1 = new StrList(); int i; for (i=5; i>=1; i--) sl1->Put(new StrListElem(Strify(i))); sl1->Sort(); Dump(sl1); for (i=1; i<=10; i++) sl->Put(new StrListElem(Strify(i))); for (i=1; i<=10; i++) sl->Push(new StrListElem(Strify(i))); sl->Sort(true); Dump(sl); sl->Sort(false); Dump(sl); printf("\nFound 2: %s\nPosition of Found 2: %d\n", sl->Find("2")->GetData()->ConstConvert(), sl->FindPos("2")); delete sl; } void StrListTest::Dump(StrList* sl, char* prefix = "") { StrListElem* ie; int i,len; printf("%s", prefix); sl->ResetEnum(); while ((ie = sl->Enum())) ie->Print(); printf("\n"); printf("%s", prefix); for (i=1, len = sl->Len(); i<=len; i++) printf("%s ", sl->GetNth(i)->GetData()->Convert()); printf("\n"); } char* StrListTest::Strify(int i) { char buf[100]; sprintf(buf, "%d", i); return strcpy(new char[strlen(buf)+1], buf); }