Grafalgo
Library of useful data structures and algorithms
|
00001 00009 #include "Adt.h" 00010 #include "List.h" 00011 #include "Utest.h" 00012 00013 using namespace grafalgo; 00014 00015 bool basicTests() { 00016 int n1 = 10; List l1(n1); 00017 00018 Utest::assertTrue(l1.empty(), "initial list not empty"); 00019 Utest::assertTrue(l1.isConsistent(), "initial list not consistent"); 00020 string s; 00021 cout << "writing empty list: " << l1 << endl; 00022 00023 for (int i = 1; i <= n1; i++) { 00024 Utest::assertTrue(!l1.member(i), 00025 "member returns true on empty list"); 00026 } 00027 00028 // test illegal argument exceptions 00029 try { 00030 l1.addFirst(n1+1); 00031 Utest::assertTrue(false,"addFirst fails to detect illegal " 00032 "argument"); 00033 } catch(IllegalArgumentException e) { } 00034 try { 00035 l1.addFirst(-1); 00036 Utest::assertTrue(false,"addFirst fails to detect illegal " 00037 "argument"); 00038 } catch(IllegalArgumentException e) { } 00039 try { 00040 l1.addFirst(1); 00041 } catch(IllegalArgumentException e) { 00042 Utest::assertTrue(false,"addFirst incorrectly detects illegal " 00043 "argument"); 00044 } 00045 cout << "writing one item list: " << l1 << endl; 00046 Utest::assertEqual(l1.toString(s), "[a]", 00047 "mismatch on adding first item"); 00048 Utest::assertTrue(l1.isConsistent(), "new list not consistent"); 00049 00050 Utest::assertTrue(!l1.empty(),"list with one item reports empty"); 00051 Utest::assertTrue(l1.member(1),"member 1 not reported in list"); 00052 00053 for (int i = 1; i <= n1; i += 2) l1.addLast(i); 00054 cout << "writing longer list: " << l1 << endl; 00055 Utest::assertEqual(l1.toString(s), "[a c e g i]", 00056 "mismatch on list [a c e g i]"); 00057 Utest::assertTrue(l1.isConsistent(), "longer list not consistent"); 00058 00059 Utest::assertTrue(l1.member(5), 00060 "member 5 not reported in list"); 00061 Utest::assertTrue(!l1.member(4), 00062 "non-member 4 is reported in list"); 00063 00064 l1.removeFirst(); 00065 Utest::assertEqual(l1.toString(s), "[c e g i]", 00066 "mismatch on list [c e g i]"); 00067 Utest::assertTrue(l1.isConsistent(), "not consistent after removal"); 00068 Utest::assertTrue(!l1.member(1), 00069 "non-member 1 is reported in list"); 00070 00071 l1.removeNext(5); 00072 Utest::assertEqual(l1.toString(s), "[c e i]", 00073 "mismatch on list [c e i]"); 00074 00075 l1.removeNext(0); 00076 Utest::assertEqual(l1.toString(s), "[e i]", 00077 "mismatch on list [e i]"); 00078 Utest::assertTrue(l1.isConsistent(), 00079 "not consistent after next removal"); 00080 00081 l1.removeFirst(); 00082 Utest::assertEqual(l1.toString(s), "[i]", 00083 "mismatch on list [i]"); 00084 Utest::assertTrue(l1.isConsistent(), 00085 "not consistent after next removal"); 00086 00087 Utest::assertTrue(!l1.empty(), 00088 "non-empty list reported as empty"); 00089 00090 l1.removeFirst(); 00091 Utest::assertEqual(l1.toString(s), "[]", 00092 "mismatch on list []"); 00093 Utest::assertTrue(l1.isConsistent(), 00094 "not consistent after final removal"); 00095 00096 Utest::assertTrue(l1.empty(), 00097 "empty list reported as non-empty"); 00098 00099 l1.addFirst(1); l1.addFirst(2); l1.addFirst(3); 00100 List l2(n1); l2.copyFrom(l1); 00101 Utest::assertEqual(l2.toString(s), "[c b a]", 00102 "mismatch on list [c b a]"); 00103 int n2 = 27; l2.expand(n2); 00104 Utest::assertEqual(l2.toString(s), "[3 2 1]", 00105 "mismatch on list [3 2 1]"); 00106 00107 l2.resize(30); l2.addFirst(1); l2.addFirst(2); l2.addFirst(3); 00108 cout << "writing numeric list: " << l2 << endl; 00109 Utest::assertEqual(l2.toString(s), "[3 2 1]", 00110 "mismatch on list [3 2 1]"); 00111 Utest::assertTrue(l1.isConsistent(), 00112 "not consistent after three more adds"); 00113 00114 // test equals method 00115 l1.clear(); l2.clear(); 00116 Utest::assertTrue(l1.equals(l1),"equals(): list testing unequal " 00117 "to itself"); 00118 Utest::assertTrue(l1.equals(l2),"equals(): empty lists testing as " 00119 "unequal"); 00120 l1.addFirst(1); 00121 Utest::assertTrue(!l1.equals(l2),"equals(): different lists testing as " 00122 "equal"); 00123 l2.addLast(1); 00124 Utest::assertTrue(l1.equals(l2),"equals(): equal lists testing as " 00125 "unequal"); 00126 l1.addLast(5); l2.addLast(5); 00127 l1.addFirst(3); l2.addFirst(3); 00128 Utest::assertTrue(l1.equals(l2),"equals(): equal lists testing as " 00129 "unequal"); 00130 l1.removeFirst(); 00131 Utest::assertTrue(!l1.equals(l2),"equals(): unequal lists testing as " 00132 "equal"); 00133 00134 return true; 00135 } 00136 00140 int main() { 00141 cout << "running basic tests\n"; 00142 if (basicTests()) cout << "basic tests passed\n"; 00143 00144 // add more systematic tests for each individual method 00145 }