mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-01-09 14:28:52 -05:00
63 lines
2.7 KiB
C++
63 lines
2.7 KiB
C++
// 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);
|
|
}
|
|
}
|
|
}
|