Grafalgo
Library of useful data structures and algorithms
/Users/jst/src/grafalgo/cpp/dataStructures/basic/unit/testList.cpp
Go to the documentation of this file.
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 }
 All Classes Files Functions Variables Typedefs Friends