Newer
Older
exercism-cpp / simple-linked-list / simple_linked_list_test.cpp
// Include the header file with the definitions of the functions you create.
#include "simple_linked_list.h"

// Include the test framework.
#ifdef EXERCISM_TEST_SUITE
#include <catch2/catch.hpp>
#else
#include "test/catch.hpp"
#endif

// Declares a single test.
TEST_CASE("EmptyListHasSizeZero")
{
    simple_linked_list::List empty{};
    REQUIRE(empty.size() == 0);
}

#ifdef EXERCISM_RUN_ALL_TESTS

TEST_CASE("SingletonListHasSizeOne")
{
    simple_linked_list::List list{};
    list.push(44);
    REQUIRE(list.size() == 1);
}

TEST_CASE("NonEmptyListHasCorrectSize")
{
    simple_linked_list::List list{};
    list.push(44);
    list.push(42);
    list.push(47);
    list.push(-11);
    REQUIRE(list.size() == 4);
}

TEST_CASE("ListHasCorrectSizeAfterPop")
{
    simple_linked_list::List list{};
    list.push(24);
    list.push(2);
    list.push(17);
    list.pop();
    REQUIRE(list.size() == 2);
}

TEST_CASE("ListHasCorrectSizeAfterPopAndPush")
{
    simple_linked_list::List list{};
    list.push(242);
    list.push(21);
    list.push(-17);
    list.pop();
    list.push(34);
    REQUIRE(list.size() == 3);

}

TEST_CASE("PopFromSize1")
{
    simple_linked_list::List list{};
    auto desired = 142;
    list.push(desired);
    auto actual = list.pop();
    REQUIRE(actual == desired);
}

TEST_CASE("PopFromSizeTwo")
{
    simple_linked_list::List list{};
    auto desired_top = 112;
    auto desired_bottom = 221;
    list.push(desired_bottom);
    list.push(desired_top);
    auto actual_top = list.pop();
    REQUIRE(actual_top == desired_top);
    auto actual_bottom = list.pop();
    REQUIRE(actual_bottom == desired_bottom);
}

TEST_CASE("PopAndPushList")
{
    simple_linked_list::List list{};

    list.push(1);
    list.push(2);
    list.push(3);
    auto third = list.pop();
    list.push(4);
    list.push(5);
    auto fifth = list.pop();
    auto forth = list.pop();
    auto second = list.pop();
    list.push(6);
    auto sixth = list.pop();
    auto first = list.pop();
    REQUIRE(first == 1);
    REQUIRE(second == 2);
    REQUIRE(third == 3);
    REQUIRE(forth == 4);
    REQUIRE(fifth == 5);
    REQUIRE(sixth == 6);
}


TEST_CASE("ReverseEmptyList")
{
    simple_linked_list::List empty{};
    empty.reverse();
    REQUIRE(empty.size() == 0);

}

TEST_CASE("ReverseNonEmptyList")
{
    simple_linked_list::List list{};
    for(int i = 0; i < 5; i++) {
        list.push(i);
    }

    list.reverse();

    for(int i = 0; i < 5; i++) {
        REQUIRE(list.pop() == i);
    }
}
#endif