Files
calculator-challenge/CalculatorCliTests.cpp
T
2024-03-13 01:55:14 +00:00

81 lines
2.1 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");
}
TEST_CASE("CalculatorCli - edge cases", "[calculator-challenge]")
{
CalculatorCli calculator;
calculator.parse("a=31+2");
CHECK_FALSE(calculator.parse("result") == "a = 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");
}