Пример #1
0
void TestAppend(DoubleLinkedList<int> & alist)
{
	std::cout << "\n********** Append **********" << std::endl;

	alist.Append(5);
	alist.Append(15);
	alist.Append(25);
	alist.Append(35);
}
Пример #2
0
void TestAppend(DoubleLinkedList<int> & alist)
{
    std::cout << "\n********** Testing: DoubleLinkedList Append **********" << std::endl;
    
    alist.Append(5);
    alist.Append(15);
    alist.Append(25);
    alist.Append(35);
    
    std::cout << alist.First() << std::endl;
    std::cout << alist.Last() << std::endl;
}
Пример #3
0
void TestExtract()
{
	DoubleLinkedList<int> alist;

	std::cout << "\n********** Extract **********" << std::endl;

	// Empty List
	try
	{
		alist.Extract(0);
	}
	catch (char * msg)
	{
		std::cout << msg << std::endl;
	}
	// Head and Tail are the same
	alist.Append(0);
	alist.Extract(0);

	try
	{
		std::cout << alist.First() << std::endl;
	}
	catch (char * msg)
	{
		std::cout << msg << std::endl;
	}

	try
	{
		std::cout << alist.Last() << std::endl;
	}
	catch (char * msg)
	{
		std::cout << msg << std::endl;
	}

	// Remove Head
	alist.Append(0);
	alist.Append(1);
	alist.Extract(0);

	std::cout << alist.First() << std::endl;
	std::cout << alist.Last() << std::endl;

	// Remove Tail
	alist.Prepend(0);
	alist.Extract(1);

	std::cout << alist.First() << std::endl;
	std::cout << alist.Last() << std::endl;
}
Пример #4
0
int main()
{
#if _DEBUG
	_CrtDumpMemoryLeaks();
	_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
#endif
	DoubleLinkedList dll;
	for (int i = 0; i < numberOfElements; i++)
	{
		dll.Append(i);
	}
	std::cout << "Current list: ";
	std::cout << dll.ToString() << std::endl << std::endl;

	std::cout << "Removing the last 3 elements" << std::endl;
	for (int i = 0; i < 3; i++)
	{
		dll.RemoveLast();
	}
	std::cout << dll.ToString() << std::endl << std::endl;

	std::cout << "Adding 3 100's as the first element" << std::endl;
	for (int i = 0; i < 3; i++)
	{
		dll.AddAtFirst(100);
	}
	std::cout << dll.ToString() << std::endl << std::endl;

	std::cout << "Removing first element" << std::endl;
	dll.RemoveFirst();
	std::cout << dll.ToString() << std::endl << std::endl;

	std::cout << "Removing at index (1) 3 times" << std::endl;
	for (int i = 0; i < 3; i++)
	{
		dll.RemoveAt(1);
	}
	std::cout << dll.ToString() << std::endl << std::endl;

	std::cout << "Adding a -500 at indices 0, 5, (length - 1), and 9999 (should be skipped and not crash)" << std::endl;
	dll.InsertAt(0, -500);
	dll.InsertAt(5, -500);
	dll.InsertAt(dll.CurrentCapacity() - 1, -500);
	dll.InsertAt(9999, -500);
	std::cout << dll.ToString() << std::endl << std::endl;

	
	std::cout << "Removing first instances of numbers -500, 15, and 999999" << std::endl;
	dll.RemoveFirstInstanceOf(-500);
	dll.RemoveFirstInstanceOf(15);
	dll.RemoveFirstInstanceOf(999999);
	std::cout << dll.ToString() << std::endl << std::endl;
	
	std::cout << "Printing the list backwards" << std::endl;
	std::cout << dll.BackwardsToString() << std::endl << std::endl;

	HoldPromptOpen();
}
Пример #5
0
void TestInsertAfter()
{
    DoubleLinkedList<int> clist;
    
    std::cout << "\n********** Testing: DoubleLinkedList InsertAfter **********" << std::endl;
    
    std::cout << "\n********** Testing: InsertAfter with Empty List **********" << std::endl;
    try
    {
        //Note: Here is the function signature so you can determine the order of parameters
        //void DoubleLinkedList<T>::InsertAfter(const T & new_data, const T & existing_data)
        clist.InsertAfter(-1, 0);
    }
    catch(const char * msg)
    {
        std::cout << msg << std::endl;
    }
    std::cout << "\n********** Testing: InsertAfter tail with only one node **********" << std::endl;
    clist.Append(0);
    clist.InsertAfter(1, 0);
    
    std::cout << clist.First() << std::endl;
    std::cout << clist.Last() << std::endl;
    
    std::cout << "\n********** Testing: InsertAfter tail with multiple nodes **********" << std::endl;
    clist.InsertAfter(3, 1);
    
    std::cout << clist.First() << std::endl;
    std::cout << clist.Last() << std::endl;
    
    std::cout << "\n********** Testing: InsertAfter a node in the middle of the list **********" << std::endl;
    clist.InsertAfter(2, 1);
    
    std::cout << clist.First() << std::endl;
    std::cout << clist.Last() << std::endl;
    
    std::cout << "\n********** Testing: InsertAfter but existing_data doesn't exist **********" << std::endl;
    try
    {
        clist.InsertAfter(-2, 99);
    }
    catch (const char * msg)
    {
        std::cout << msg << std::endl;
    }
}
Пример #6
0
void TestInsertBefore()
{
	DoubleLinkedList<int> clist;

	std::cout << "\n********** InsertBefore **********" << std::endl;

	// Empty List
	try
	{
		clist.InsertBefore(-1, 0);
	}
	catch (char * msg)
	{
		std::cout << msg << std::endl;
	}
	// Head and Tail are the same
	clist.Append(0);
	clist.InsertBefore(-1, 0);

	std::cout << clist.First() << std::endl;
	std::cout << clist.Last() << std::endl;

	// Before Head
	clist.InsertBefore(-3, -1);

	std::cout << clist.First() << std::endl;
	std::cout << clist.Last() << std::endl;

	// Middle
	clist.InsertBefore(-2, -1);

	std::cout << clist.First() << std::endl;
	std::cout << clist.Last() << std::endl;

	// Node doesn't exist
	try
	{
		clist.InsertBefore(-2, 99);
	}
	catch (char * msg)
	{
		std::cout << msg << std::endl;
	}
}
Пример #7
0
void TestInsertAfter()
{
	DoubleLinkedList<int> clist;

	std::cout << "\n********** InsertAfter **********" << std::endl;

	try
	{
		clist.InsertAfter(-1, 0);
	}
	catch (char * msg)
	{
		std::cout << msg << std::endl;
	}
	// Head and Tail are the same
	clist.Append(0);
	clist.InsertAfter(1, 0);

	std::cout << clist.First() << std::endl;
	std::cout << clist.Last() << std::endl;

	// After Tail
	clist.InsertAfter(3, 1);

	std::cout << clist.First() << std::endl;
	std::cout << clist.Last() << std::endl;

	// Middle
	clist.InsertAfter(2, 1);

	std::cout << clist.First() << std::endl;
	std::cout << clist.Last() << std::endl;

	// Node doesn't exist
	try
	{
		clist.InsertAfter(-2, 99);
	}
	catch (char * msg)
	{
		std::cout << msg << std::endl;
	}
}
Пример #8
0
void TestExtract()
{
    DoubleLinkedList<int> alist;
    
    std::cout << "\n********** Testing: DoubleLinkedList Extract **********" << std::endl;
    
    std::cout << "\n********** Testing: Extract with empty list**********" << std::endl;
    try
    {
        //Note: The parameter is the DATA to be removed
        alist.Extract(0);
    }
    catch (const char * msg)
    {
        std::cout << msg << std::endl;
    }
    std::cout << "\n********** Testing: Extract removing only node **********" << std::endl;
    alist.Append(0);
    alist.Extract(0);
    
    try
    {
        std::cout << alist.First() << std::endl;
    }
    catch (const char * msg)
    {
        std::cout << msg << std::endl;
    }
    try
    {
        std::cout << alist.Last() << std::endl;
    }
    catch (const char * msg)
    {
        std::cout << msg << std::endl;
    }
    
    std::cout << "\n********** Testing: Extract removing head **********" << std::endl;
    alist.Append(0);
    alist.Append(1);
    alist.Extract(0);
    
    std::cout << alist.First() << std::endl;
    std::cout << alist.Last() << std::endl;
    
    std::cout << "\n********** Testing: Extract removing tail **********" << std::endl;
    alist.Prepend(0);
    alist.Extract(1);
    
    std::cout << alist.First() << std::endl;
    std::cout << alist.Last() << std::endl;
    
    std::cout << "\n********** Testing: Extract removing non-existing node **********" << std::endl;
    alist.Append(0);
    alist.Append(1);
    
    try
    {
        alist.Extract(99);
    }
    catch (const char * msg)
    {
        std::cout << msg << std::endl;
    }
}