95 lines
2.5 KiB
C++
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");
|
|
}
|