~aleteoryx/muditaos

ref: 0ef0d615f34e275f088890a1244dd480dd467920 muditaos/module-apps/application-calculator/tests/CalculatorUtility_tests.cpp -rw-r--r-- 2.9 KiB
0ef0d615 — Krzysztof Mozdzynski [EGD-4150] Change filename i18 to i18n (#1108) 5 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#define CATCH_CONFIG_MAIN
#include <catch2/catch.hpp>
#include "application-calculator/data/CalculatorUtility.hpp"
#include <module-utils/i18n/i18n.hpp>
#include <cstring>

class vfs vfs;

struct vfs_initializer
{
    vfs_initializer()
    {
        vfs.Init();
    }
} vfs_initializer;

TEST_CASE("Calculator utilities")
{
    auto calculator = Calculator();
    utils::localize.setDisplayLanguage("English");

    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::localize.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("Division by 0")
    {
        auto result = calculator.calculate("15+5÷0");
        REQUIRE(result.value == utils::localize.get("app_calculator_error"));
        REQUIRE(result.equation == "15+5/0");
        REQUIRE(result.isError);
    }

    SECTION("Division 0 by 0")
    {
        auto result = calculator.calculate("0÷0");
        REQUIRE(result.value == utils::localize.get("app_calculator_error"));
        REQUIRE(result.equation == "0/0");
        REQUIRE(result.isError);
    }

    SECTION("Result exceeds maximum number")
    {
        auto result = calculator.calculate("1.79769e+308×2");
        REQUIRE(result.value == utils::localize.get("app_calculator_error"));
        REQUIRE(result.equation == "1.79769e+308*2");
        REQUIRE(result.isError);
    }
}