Newer
Older
exercism-cpp / election-day / election_day_test.cpp
#include "election_day.cpp"
#ifdef EXERCISM_TEST_SUITE
#include <catch2/catch.hpp>
#else
#include "test/catch.hpp"
#endif

using namespace election;

TEST_CASE("Votes are returned correctly for 0 votes", "[task_1]") {
    ElectionResult result{};
    int expected{0};
    REQUIRE(vote_count(result) == expected);
}

#if defined(EXERCISM_RUN_ALL_TESTS)

TEST_CASE("Votes are returned correctly for 211 votes", "[task_1]") {
    ElectionResult result{"Nadir", 211};
    int expected{211};
    REQUIRE(vote_count(result) == expected);
}

TEST_CASE("Votes are incremented correctly for new votes", "[task_2]") {
    ElectionResult result{};
    int expected{23};
    increment_vote_count(result, 23);
    REQUIRE(result.votes == expected);
}

TEST_CASE("Votes are incremented correctly for existing votes", "[task_2]") {
    ElectionResult result{"Saoirse", 94};
    int expected{1994};
    increment_vote_count(result, 1900);
    REQUIRE(result.votes == expected);
}

TEST_CASE("Votes can be decremented", "[task_2]") {
    ElectionResult result{"Lance", 7};
    int expected{0};
    increment_vote_count(result, -7);
    REQUIRE(result.votes == expected);
}

TEST_CASE("Presidency, one candidate", "[task_3]") {
    ElectionResult option1{"Coriolanus Snow", 13};
    std::vector<ElectionResult> final_count{option1};

    ElectionResult& result = determine_result(final_count);
    std::string expected{"President Coriolanus Snow"};

    REQUIRE(result.name == expected);
}

TEST_CASE("Presidency, two candidates", "[task_3]") {
    ElectionResult option1{"Megatron", 4};
    ElectionResult option2{"Optimus Prime", 76};
    std::vector<ElectionResult> final_count{option1, option2};

    ElectionResult& result = determine_result(final_count);
    std::string expected{"President Optimus Prime"};

    REQUIRE(result.name == expected);
}


TEST_CASE("Presidency, several candidates", "[task_3]") {
    ElectionResult option1{"David", 11};
    ElectionResult option2{"Shaw", 12};
    ElectionResult option3{"Ripley", 79};
    ElectionResult option4{"Call", 8};
    std::vector<ElectionResult> final_count{option1, option2, option3, option4};

    ElectionResult& result = determine_result(final_count);
    std::string expected{"President Ripley"};

    REQUIRE(result.name == expected);
}

#endif