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();
}