// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include #include #include using namespace utils; TEST_CASE("Linear approximation") { SECTION("Corner cases") { SECTION("Unsigned") { constexpr auto entries = std::array, 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, 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, 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, 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); } } }