// // Unit tests for the LogView module: IntegerCalculator (the module's pure // logic class, compiled from the LogView sources). // #include "../LogView/IntegerCalculator.hpp" #include #include using IntegerCalculator = N_SST::IntegerCalculator; using E_Error = IntegerCalculator::E_Error; class logview_unit_test : public QObject { Q_OBJECT private slots: void basicArithmetic(); void operatorPriority(); void parentheses(); void unaryMinus(); void divisionByZero(); void noOperandBetweenOperators(); void missingRightParanthesis(); void missingLeftParanthesis(); void unknownVariable(); void variables(); }; void logview_unit_test::basicArithmetic() { IntegerCalculator calc; E_Error error = E_Error::e_UnknownError; QCOMPARE(calc.calc("1+2", error), 3); QCOMPARE(error, E_Error::e_Ok); QCOMPARE(calc.calc("10-4", error), 6); QCOMPARE(error, E_Error::e_Ok); QCOMPARE(calc.calc("6*7", error), 42); QCOMPARE(error, E_Error::e_Ok); QCOMPARE(calc.calc("84/4", error), 21); QCOMPARE(error, E_Error::e_Ok); } void logview_unit_test::operatorPriority() { IntegerCalculator calc; E_Error error = E_Error::e_UnknownError; QCOMPARE(calc.calc("1+2*3", error), 7); QCOMPARE(error, E_Error::e_Ok); QCOMPARE(calc.calc("2*3+4", error), 10); QCOMPARE(error, E_Error::e_Ok); QCOMPARE(calc.calc("10-2*3", error), 4); QCOMPARE(error, E_Error::e_Ok); } void logview_unit_test::parentheses() { IntegerCalculator calc; E_Error error = E_Error::e_UnknownError; QCOMPARE(calc.calc("(1+2)*3", error), 9); QCOMPARE(error, E_Error::e_Ok); QCOMPARE(calc.calc("((2+3)*4)", error), 20); QCOMPARE(error, E_Error::e_Ok); } void logview_unit_test::unaryMinus() { IntegerCalculator calc; E_Error error = E_Error::e_UnknownError; QCOMPARE(calc.calc("-3+5", error), 2); QCOMPARE(error, E_Error::e_Ok); } void logview_unit_test::divisionByZero() { IntegerCalculator calc; E_Error error = E_Error::e_Ok; (void)calc.calc("1/0", error); QCOMPARE(error, E_Error::e_DivisionByZero); } void logview_unit_test::noOperandBetweenOperators() { IntegerCalculator calc; E_Error error = E_Error::e_Ok; (void)calc.calc("1+*2", error); QCOMPARE(error, E_Error::e_NoOperandBetweenOperators); } void logview_unit_test::missingRightParanthesis() { IntegerCalculator calc; E_Error error = E_Error::e_Ok; (void)calc.calc("(1+2", error); QCOMPARE(error, E_Error::e_MissingRightParanthesis); } void logview_unit_test::missingLeftParanthesis() { IntegerCalculator calc; E_Error error = E_Error::e_Ok; (void)calc.calc("1+2)", error); QCOMPARE(error, E_Error::e_MissingLeftParanthesis); } void logview_unit_test::unknownVariable() { IntegerCalculator calc; E_Error error = E_Error::e_Ok; (void)calc.calc("y", error); QCOMPARE(error, E_Error::e_UnknownOperationOrVariable); } void logview_unit_test::variables() { IntegerCalculator calc; E_Error error = E_Error::e_UnknownError; calc.addVariable("x", 5); QCOMPARE(calc.calc("x*2", error), 10); QCOMPARE(error, E_Error::e_Ok); calc.addVariable("y", -3); QCOMPARE(calc.calc("x+y", error), 2); QCOMPARE(error, E_Error::e_Ok); calc.removeVariable("x"); error = E_Error::e_Ok; (void)calc.calc("x", error); QCOMPARE(error, E_Error::e_UnknownOperationOrVariable); } QTEST_MAIN(logview_unit_test) #include "logview_unit_test.moc"