flightPlanner / LinkyListTests.cpp
LinkyListTests.cpp
Raw
//
// Created by Christian Gould on 9/16/20.
//
#include "catch.hpp"
#include "LinkyList.h"
#include "Stringy.h"
TEST_CASE("Linked List Tests" "[LinkyList.h]") {
	SECTION("primitive type tests for minimum functionality") {
		LinkyList<int> LinkTester;
		LinkTester.push_back (5);
		REQUIRE(LinkTester.getSize () == 1);
		LinkTester.push_back (7);
		REQUIRE(LinkTester.getSize () == 2);
		REQUIRE(LinkTester[ 0 ] == 5);
		REQUIRE(LinkTester[ 1 ] == 7);
		LinkTester.push_back (10);
		REQUIRE(LinkTester.getSize () == 3);
		LinkTester.push_back (27);
		REQUIRE(LinkTester.getSize () == 4);
		LinkTester.remove (1);
		REQUIRE(LinkTester[ 1 ] == 10);
		REQUIRE(LinkTester.getSize () == 3);
		LinkTester.remove (1);
		REQUIRE(LinkTester[ 1 ] == 27);
		REQUIRE(LinkTester.getSize () == 2);
	}SECTION("complex type tests for minimum functionality") {
		LinkyList<Stringy> LinkyString;
		LinkyString.push_back (Stringy ("Hello"));
		REQUIRE(LinkyString.getSize () == 1);
		LinkyString.push_back (Stringy ("Goodbye"));
		REQUIRE(LinkyString.getSize () == 2);
		REQUIRE(LinkyString[ 0 ] == "Hello");
		REQUIRE(LinkyString[ 1 ] == "Goodbye");
		LinkyString.push_back (Stringy ("Yes"));
		REQUIRE(LinkyString.getSize () == 3);
		LinkyString.push_back ((Stringy ("No")));
		REQUIRE(LinkyString.getSize () == 4);
		LinkyString.remove (1);
		REQUIRE(LinkyString[ 1 ] == "Yes");
		REQUIRE(LinkyString.getSize () == 3);
		LinkyString.remove (1);
		REQUIRE(LinkyString[ 1 ] == "No");
		REQUIRE(LinkyString.getSize () == 2);
	}SECTION("LinkyIterator functionality") {
		LinkyList<Stringy> okie;
		okie.push_back (Stringy ("uno"));
		okie.push_back (Stringy ("dos"));
		okie.push_back (Stringy ("tres"));
		okie.push_back (Stringy ("quattro"));
		okie.push_back (Stringy ("cinco"));
// create the iterator
		auto okieiter = okie.begin ();
		CHECK(okieiter.getPos() == 0);
		CHECK(*okieiter == "uno");
		++okieiter;
		CHECK(okieiter.getPos() == 1);
		CHECK(*okieiter == "dos");
		++okieiter;
		CHECK(okieiter.getPos() == 2);
		CHECK(*okieiter == "tres");
		++okieiter;
		CHECK(okieiter.getPos() == 3);
		CHECK(*okieiter == "quattro");
		++okieiter;
		CHECK(okieiter.getPos() == 4);
		CHECK(*okieiter == "cinco");
		int counter = 0;
		okieiter = okie.begin ();
		while (okieiter != okie.end ()) {
			//cout << "in while, where okieier = " << *okieiter << "and end = " << *okie.end() << endl;
			counter++;
			okieiter.operator++ ();
		}
		CHECK(counter == 5);
	}SECTION ("Insertion Sort funtionality") {
		LinkyList<int> inty;
		LinkyList<Stringy> stry;
		inty.push_back (1);
		inty.push_back (10);
		inty.push_back (8);
		inty.push_back (3);
		inty.insertionSort ();
		CHECK(inty[ 0 ] == 1);
		CHECK(inty[ 1 ] == 3);
		CHECK(inty[ 2 ] == 8);
		CHECK(inty[ 3 ] == 10);
		stry.push_back (Stringy ("AAA"));
		stry.push_back (Stringy ("ZZZ"));
		stry.push_back (Stringy ("BBB"));
		stry.push_back (Stringy ("CCC"));
		stry.insertionSort ();
		CHECK(stry[ 0 ] == "AAA");
		CHECK(stry[ 1 ] == "BBB");
		CHECK(stry[ 2 ] == "CCC");
		CHECK(stry[ 3 ] == "ZZZ");
	}SECTION ("Remove duplicates function") {
		LinkyList<int> linker;
		LinkyList<Stringy> stry;
		linker.push_back (2);
		linker.push_back (2);
		linker.push_back (45);
		linker.push_back (52);
		linker.push_back (45);
		linker.push_back (52);
		linker.insertionSort ();
		linker.remDuplicates ();
		CHECK(linker.getSize () == 3);
		CHECK(linker[ 0 ] == 2);
		CHECK(linker[ 1 ] == 45);
		CHECK(linker[ 2 ] == 52);
		stry.push_back (Stringy ("AAA"));
		stry.push_back (Stringy ("ZZZ"));
		stry.push_back (Stringy ("BBB"));
		stry.push_back (Stringy ("AAA"));
		stry.push_back (Stringy ("ZZZ"));
		stry.push_back (Stringy ("CCC"));
		stry.insertionSort ();
		stry.remDuplicates ();
		CHECK(stry.getSize () == 4);
		CHECK(stry[ 0 ] == "AAA");
		CHECK(stry[ 1 ] == "BBB");
		CHECK(stry[ 2 ] == "CCC");
		CHECK(stry[ 3 ] == "ZZZ");
		// small test cases for binary search
		CHECK(stry.binarySearch ("AAA", 0, 3) == 0);
		CHECK(stry.binarySearch ("BBB", 0, 3) == 1);
		CHECK(stry.binarySearch ("CCC", 0, 3) == 2);
		CHECK(stry.binarySearch ("ZZZ", 0, 3) == 3);
		CHECK(linker.binarySearch (2, 0, linker.getSize () - 1) == 0);
		CHECK(linker.binarySearch (45, 0, linker.getSize () - 1) == 1);
		CHECK(linker.binarySearch (52, 0, linker.getSize () - 1) == 2);
	}
	SECTION("assignment operator tests"){
		LinkyList<int> ints;
		LinkyList<Stringy> strings;
		ints.push_back(1);
		ints.push_back(2);
		ints.push_back(3);
		ints.push_back(4);
		strings.push_back("one");
		strings.push_back("two");
		strings.push_back("three");
		strings.push_back("four");
		LinkyList<int> assignInt;
		assignInt = ints;
		LinkyList<Stringy> assignStr;
		assignStr = strings;
		CHECK(assignInt[0] == 1);
		CHECK(assignInt[1] == 2);
		CHECK(assignInt[2] == 3);
		CHECK(assignInt[3] == 4);
		CHECK(assignStr[0] == "one");
		CHECK(assignStr[1] == "two");
		CHECK(assignStr[2] == "three");
		CHECK(assignStr[3] == "four");
		// check that the two LinkedLists are the same
		CHECK(assignStr == strings);
		CHECK(assignInt == ints);

		// function which will return an iterator the the found object
		SECTION("Find function"){
			LinkyIter<Stringy> iter = assignStr.begin();
			CHECK(iter == assignStr.find("one"));
			++iter;
			CHECK(iter == assignStr.find("two"));
			++iter;
			CHECK(iter == assignStr.find("three"));
			++iter;
			CHECK(iter == assignStr.find("four"));

		}
	}

}