int main(int argc, const char * argv[]) { DList<int> myList; //for(int i = 0; i < 10; ++i) // myList.addFront(i); myList.addBack(50); myList.addBack(100); cout << myList.getFront() << endl; cout << myList.getBack() << endl; while(!myList.isEmpty()) cout << myList.removeFront() << endl; cout << myList.getSize() << endl; return 0; }
void UtilTestCase::testDList() { DList<int> l; CPPUNIT_ASSERT(l.isEmpty()); CPPUNIT_ASSERT(l.getSize() == 0); CPPUNIT_ASSERT(l.getHeader()->getNext() == l.getHeader()); CPPUNIT_ASSERT(l.removeFirst() == NULL); CPPUNIT_ASSERT(l.removeLast() == NULL); DLink<int> n1(1); CPPUNIT_ASSERT(n1.get() == 1); DLink<int> n2(2); CPPUNIT_ASSERT(n2.get() == 2); n2.set(3); CPPUNIT_ASSERT(n2.get() == 3); // 测试addFirst和addLast l.addFirst(&n1); CPPUNIT_ASSERT(l.getSize() == 1); CPPUNIT_ASSERT(!l.isEmpty()); CPPUNIT_ASSERT(l.getHeader()->getNext() == &n1); CPPUNIT_ASSERT(l.getHeader()->getPrev() == &n1); CPPUNIT_ASSERT(l.getHeader()->getNext()->getNext() == l.getHeader()); CPPUNIT_ASSERT(n1.getList() == &l); CPPUNIT_ASSERT(n1.getNext() == l.getHeader()); CPPUNIT_ASSERT(n1.getPrev() == l.getHeader()); l.addLast(&n2); CPPUNIT_ASSERT(l.getSize() == 2); CPPUNIT_ASSERT(!l.isEmpty()); CPPUNIT_ASSERT(l.getHeader()->getNext() == &n1); CPPUNIT_ASSERT(l.getHeader()->getPrev() == &n2); CPPUNIT_ASSERT(l.getHeader()->getNext()->getNext() == &n2); CPPUNIT_ASSERT(l.getHeader()->getNext()->getNext()->getNext() == l.getHeader()); CPPUNIT_ASSERT(n1.getNext() == &n2); CPPUNIT_ASSERT(n1.getPrev() == l.getHeader()); CPPUNIT_ASSERT(n2.getList() == &l); CPPUNIT_ASSERT(n2.getNext() == l.getHeader()); CPPUNIT_ASSERT(n2.getPrev() == &n1); // 测试moveToFirst和moveToLast l.moveToFirst(&n2); CPPUNIT_ASSERT(l.getSize() == 2); CPPUNIT_ASSERT(!l.isEmpty()); CPPUNIT_ASSERT(l.getHeader()->getNext() == &n2); CPPUNIT_ASSERT(l.getHeader()->getPrev() == &n1); CPPUNIT_ASSERT(l.getHeader()->getNext()->getNext() == &n1); CPPUNIT_ASSERT(l.getHeader()->getNext()->getNext()->getNext() == l.getHeader()); CPPUNIT_ASSERT(n1.getPrev() == &n2); CPPUNIT_ASSERT(n1.getNext() == l.getHeader()); CPPUNIT_ASSERT(n2.getPrev() == l.getHeader()); CPPUNIT_ASSERT(n2.getNext() == &n1); l.moveToLast(&n2); CPPUNIT_ASSERT(l.getSize() == 2); CPPUNIT_ASSERT(!l.isEmpty()); CPPUNIT_ASSERT(l.getHeader()->getNext() == &n1); CPPUNIT_ASSERT(l.getHeader()->getPrev() == &n2); CPPUNIT_ASSERT(l.getHeader()->getNext()->getNext() == &n2); CPPUNIT_ASSERT(l.getHeader()->getNext()->getNext()->getNext() == l.getHeader()); CPPUNIT_ASSERT(n1.getNext() == &n2); CPPUNIT_ASSERT(n1.getPrev() == l.getHeader()); CPPUNIT_ASSERT(n2.getNext() == l.getHeader()); CPPUNIT_ASSERT(n2.getPrev() == &n1); // 测试removeFirst CPPUNIT_ASSERT(l.removeFirst() == &n1); CPPUNIT_ASSERT(n1.getList() == NULL); CPPUNIT_ASSERT(n1.getNext() == NULL); CPPUNIT_ASSERT(n1.getPrev() == NULL); CPPUNIT_ASSERT(l.getSize() == 1); CPPUNIT_ASSERT(!l.isEmpty()); CPPUNIT_ASSERT(l.getHeader()->getNext() == &n2); CPPUNIT_ASSERT(l.getHeader()->getPrev() == &n2); CPPUNIT_ASSERT(l.getHeader()->getNext()->getNext() == l.getHeader()); CPPUNIT_ASSERT(n2.getNext() == l.getHeader()); CPPUNIT_ASSERT(n2.getPrev() == l.getHeader()); CPPUNIT_ASSERT(l.removeFirst() == &n2); CPPUNIT_ASSERT(n2.getList() == NULL); CPPUNIT_ASSERT(n2.getNext() == NULL); CPPUNIT_ASSERT(n2.getPrev() == NULL); CPPUNIT_ASSERT(l.isEmpty()); CPPUNIT_ASSERT(l.getSize() == 0); CPPUNIT_ASSERT(l.getHeader()->getNext() == l.getHeader()); // 测试removeLast l.addLast(&n1); n1.addAfter(&n2); CPPUNIT_ASSERT(l.removeLast() == &n2); CPPUNIT_ASSERT(n2.getList() == NULL); CPPUNIT_ASSERT(n2.getNext() == NULL); CPPUNIT_ASSERT(n2.getPrev() == NULL); CPPUNIT_ASSERT(l.getSize() == 1); CPPUNIT_ASSERT(!l.isEmpty()); CPPUNIT_ASSERT(l.getHeader()->getNext() == &n1); CPPUNIT_ASSERT(l.getHeader()->getPrev() == &n1); CPPUNIT_ASSERT(l.getHeader()->getNext()->getNext() == l.getHeader()); CPPUNIT_ASSERT(n1.getNext() == l.getHeader()); CPPUNIT_ASSERT(n1.getPrev() == l.getHeader()); CPPUNIT_ASSERT(l.removeLast() == &n1); CPPUNIT_ASSERT(n1.getList() == NULL); CPPUNIT_ASSERT(n1.getNext() == NULL); CPPUNIT_ASSERT(n1.getPrev() == NULL); CPPUNIT_ASSERT(l.isEmpty()); CPPUNIT_ASSERT(l.getSize() == 0); CPPUNIT_ASSERT(l.getHeader()->getNext() == l.getHeader()); // 测试DLink::unLink l.addLast(&n1); n1.addAfter(&n2); n1.unLink(); n1.unLink(); CPPUNIT_ASSERT(n1.getList() == NULL); CPPUNIT_ASSERT(n1.getNext() == NULL); CPPUNIT_ASSERT(n1.getPrev() == NULL); CPPUNIT_ASSERT(l.getSize() == 1); CPPUNIT_ASSERT(!l.isEmpty()); CPPUNIT_ASSERT(l.getHeader()->getNext() == &n2); CPPUNIT_ASSERT(l.getHeader()->getPrev() == &n2); CPPUNIT_ASSERT(l.getHeader()->getNext()->getNext() == l.getHeader()); CPPUNIT_ASSERT(n2.getNext() == l.getHeader()); CPPUNIT_ASSERT(n2.getPrev() == l.getHeader()); }