~aleteoryx/muditaos

ref: 97a2c8592674d5458a9caafd1d26f4185f9da13d muditaos/module-utils/utility/tests/value_scaler.cpp -rw-r--r-- 2.7 KiB
97a2c859 — Lefucjusz [MOS-1063] Fix device freeze after onboarding in Spanish 1 year, 9 months 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
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <catch2/catch.hpp>

#include <ValueScaler.hpp>

#include <climits>

using namespace utils;

TEST_CASE("Linear approximation")
{
    SECTION("Corner cases")
    {
        SECTION("Unsigned")
        {
            constexpr auto entries = std::array<Entry<std::uint32_t>, 1>{{{{100, 100}, {100, 100}}}};
            REQUIRE_FALSE(find_and_scale_value(entries, 0U));
            REQUIRE(find_and_scale_value(entries, 100U).value() == 100);
            REQUIRE_FALSE(find_and_scale_value(entries, 101U));
        }

        SECTION("Signed")
        {
            constexpr auto entries = std::array<Entry<std::int32_t>, 1>{{{{-100, -100}, {-100, -100}}}};
            REQUIRE_FALSE(find_and_scale_value(entries, 0));
            REQUIRE(find_and_scale_value(entries, -100).value() == -100);
            REQUIRE_FALSE(find_and_scale_value(entries, 101));
            REQUIRE_FALSE(find_and_scale_value(entries, -101));
        }

        SECTION("Float")
        {
            constexpr auto entries = std::array<Entry<float>, 1>{{{{-100, -100}, {-100, -100}}}};
            REQUIRE_FALSE(find_and_scale_value(entries, 0.0f));
            REQUIRE(find_and_scale_value(entries, -100.0f).value() == -100.0f);
            REQUIRE_FALSE(find_and_scale_value(entries, 101.0f));
            REQUIRE_FALSE(find_and_scale_value(entries, -101.0f));
        }

        SECTION("Basic use case")
        {
            constexpr auto entries = std::array<Entry<std::int32_t>, 8>{{{{-10, -1}, {0, 0}},
                                                                         {{0, 5}, {1, 1}},
                                                                         {{6, 10}, {2, 5}},
                                                                         {{11, 30}, {6, 29}},
                                                                         {{31, 50}, {30, 53}},
                                                                         {{51, 70}, {54, 77}},
                                                                         {{71, 99}, {78, 99}},
                                                                         {{100, 100}, {100, 100}}}};

            REQUIRE_FALSE(find_and_scale_value(entries, -11));
            REQUIRE(find_and_scale_value(entries, -10).value() == 0);
            REQUIRE(find_and_scale_value(entries, -1).value() == 0);
            REQUIRE(find_and_scale_value(entries, 0).value() == 1);
            REQUIRE(find_and_scale_value(entries, 6).value() == 2);
            REQUIRE(find_and_scale_value(entries, 10).value() == 5);
            REQUIRE(find_and_scale_value(entries, 99).value() == 99);
        }
    }
}