// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md #include #include #include #include #include TEST_CASE("Calculator utilities") { auto calculator = calc::Calculator(); utils::setDisplayLanguage("English"); SECTION("Empty input") { auto result = calculator.calculate(""); REQUIRE(result.value == std::string{}); REQUIRE(result.equation == ""); REQUIRE(!result.isError); } SECTION("No operation") { auto result = calculator.calculate("0"); REQUIRE(result.value == "0"); REQUIRE(result.equation == "0"); REQUIRE(!result.isError); result = calculator.calculate("1234"); REQUIRE(result.value == "1234"); REQUIRE(result.equation == "1234"); REQUIRE(!result.isError); result = calculator.calculate("43211e6"); REQUIRE(result.value == "4.321e10"); REQUIRE(result.equation == "43211e6"); REQUIRE(!result.isError); } SECTION("Addition") { auto result = calculator.calculate("5+4+8+6"); REQUIRE(result.value == "23"); REQUIRE(result.equation == "5+4+8+6"); REQUIRE(!result.isError); } SECTION("Subtraction") { auto result = calculator.calculate("5-4-8-6"); REQUIRE(result.value == "-13"); REQUIRE(result.equation == "5-4-8-6"); REQUIRE(!result.isError); } SECTION("Multiplication") { auto result = calculator.calculate("5×5"); REQUIRE(result.value == "25"); REQUIRE(result.equation == "5*5"); REQUIRE(!result.isError); } SECTION("Division") { auto result = calculator.calculate("15÷3"); REQUIRE(result.value == "5"); REQUIRE(result.equation == "15/3"); REQUIRE(!result.isError); } SECTION("Mixed operations") { auto result = calculator.calculate("15÷3+5×-5-16+40"); REQUIRE(result.value == "4"); REQUIRE(result.equation == "15/3+5*-5-16+40"); REQUIRE(!result.isError); } SECTION("Fraction with full stop") { auto result = calculator.calculate("15.5+12.056"); REQUIRE(result.value == "27.556"); REQUIRE(result.equation == "15.5+12.056"); REQUIRE(!result.isError); } SECTION("Fraction with comma") { utils::setDisplayLanguage("Polski"); auto result = calculator.calculate("15,5+12,056"); REQUIRE(result.value == "27,556"); REQUIRE(result.equation == "15.5+12.056"); REQUIRE(!result.isError); } SECTION("Fraction with comma - crash case [EGD-7021]") { utils::setDisplayLanguage("Polski"); auto result = calculator.calculate("30"); REQUIRE(result.value == "30"); REQUIRE(result.equation == "30"); REQUIRE(!result.isError); } SECTION("Division by 0") { auto result = calculator.calculate("15+5÷0"); REQUIRE(result.value == calc::symbols::strings::error_str()); REQUIRE(result.equation == "15+5/0"); REQUIRE(result.isError); } SECTION("Division 0 by 0") { auto result = calculator.calculate("0÷0"); REQUIRE(result.value == calc::symbols::strings::error_str()); REQUIRE(result.equation == "0/0"); REQUIRE(result.isError); } SECTION("Result exceeds maximum number") { auto result = calculator.calculate("1.79769e+308×2"); REQUIRE(result.value == calc::symbols::strings::error_str()); REQUIRE(result.equation == "1.79769e+308*2"); REQUIRE(result.isError); } SECTION("Round to fit in screen") { auto result = calculator.calculate("1.1234512345"); REQUIRE(result.value == "1.123451"); REQUIRE(!result.isError); result = calculator.calculate("0.0567891"); REQUIRE(result.value == "0.056789"); REQUIRE(!result.isError); result = calculator.calculate("-0.056789"); REQUIRE(result.value == "-0.05679"); REQUIRE(!result.isError); result = calculator.calculate("15.556789"); REQUIRE(result.value == "15.55679"); REQUIRE(!result.isError); } SECTION("Change to scientific notation (number > 0)") { auto result = calculator.calculate("12345.55555"); REQUIRE(result.value == "1.2346e4"); REQUIRE(!result.isError); } SECTION("Change to scientific notation (number < 0)") { auto result = calculator.calculate("-12345.55555"); REQUIRE(result.value == "-1.235e4"); REQUIRE(!result.isError); } SECTION("Change to scientific notation (0 < number < 1)") { auto result = calculator.calculate("0.000456712"); REQUIRE(result.value == "4.567e-4"); REQUIRE(!result.isError); } SECTION("Change to scientific notation (-1 < number < 0)") { auto result = calculator.calculate("-0.000456712"); REQUIRE(result.value == "-4.57e-4"); REQUIRE(!result.isError); } }