Files
calculator-challenge/CalculatorCliTests.cpp
T

95 lines
2.5 KiB
C++

#include <catch2/catch_test_macros.hpp>
#include "CalculatorCli.hpp"
TEST_CASE("CalculatorCli - can parse operations", "[calculator-challenge]")
{
CalculatorCli calculator;
calculator.parse("a = 4 + 1");
CHECK(calculator.parse("result") == "a = 5");
calculator.parse(" a = 4 + 1");
CHECK(calculator.parse("result") == "a = 5");
calculator.parse("a = 4 + 1 ");
CHECK(calculator.parse("result") == "a = 5");
calculator.parse("a = 4 + 1");
CHECK(calculator.parse("result") == "a = 5");
calculator.parse("a = 42 + 1");
CHECK(calculator.parse("result") == "a = 43");
calculator.parse("d = t + 2");
calculator.parse("t = 1 + 9");
calculator.parse("e = d + d");
CHECK(calculator.parse("result") == "e = 24");
}
TEST_CASE("CalculatorCli - edge cases", "[calculator-challenge]")
{
CalculatorCli calculator;
calculator.parse("a=31 + 2");
CHECK(calculator.parse("result") == "a = 33");
calculator.parse("b= 31+ 2");
CHECK_FALSE(calculator.parse("result") == "b = 33");
calculator.parse("c= 31 +2");
CHECK_FALSE(calculator.parse("result") == "c = 33"); // TODO: @JC do not require spaces
}
TEST_CASE("CalculatorCli - can undo operations", "[calculator-challenge]")
{
CalculatorCli calculator;
calculator.parse("a = 4 + 1");
CHECK(calculator.parse("result") == "a = 5");
calculator.parse(" a = 6 + 1");
CHECK(calculator.parse("result") == "a = 7");
SECTION("simple command")
{
calculator.parse("undo");
CHECK(calculator.parse("result") == "a = 5");
}
SECTION("two undos")
{
calculator.parse("undo");
CHECK(calculator.parse("result") == "a = 5");
calculator.parse("undo");
CHECK(calculator.parse("result") == "N/A");
}
SECTION("with space")
{
calculator.parse("undo ");
CHECK(calculator.parse("result") == "a = 5");
}
SECTION("with zero")
{
calculator.parse("undo 0");
CHECK(calculator.parse("result") == "a = 7");
}
}
TEST_CASE("CalculatorCli - can undo multiple operations", "[calculator-challenge]")
{
CalculatorCli calculator;
calculator.parse("a = 4 + 1");
CHECK(calculator.parse("result") == "a = 5");
calculator.parse(" a = 6 + 1");
CHECK(calculator.parse("result") == "a = 7");
calculator.parse("b = 6 + 1");
CHECK(calculator.parse("result") == "b = 7");
calculator.parse("undo 2");
CHECK(calculator.parse("result") == "a = 5");
}