Skip to content

Commit

Permalink
Merge pull request #68 from ichiro-its/hotfix/fix-map-function
Browse files Browse the repository at this point in the history
[Hotfix] - Fix Map Function
  • Loading branch information
FaaizHaikal authored May 21, 2024
2 parents 1b77713 + c6d79eb commit c7473d8
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 12 deletions.
7 changes: 6 additions & 1 deletion include/keisan/number.impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,12 @@ T map(
const T & value, const T & source_min, const T & source_max,
const T & target_min, const T & target_max)
{
return target_min + scale(value - source_min, source_max - source_min, target_max - target_min);
auto source_val = value;
source_val = std::min(source_val, std::max(source_min, source_max));
source_val = std::max(source_val, std::min(source_min, source_max));

return target_min +
scale(source_val - source_min, source_max - source_min, target_max - target_min);
}

template<typename T>
Expand Down
48 changes: 37 additions & 11 deletions test/number_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,35 +63,61 @@ TEST(NumberTest, ScaleFloatingPoint)
TEST(NumberTest, MapIntegral)
{
EXPECT_EQ(ksn::map(5, 2, 4, 0, 1), 1) <<
"5 - 2 = 3\n"
"min(5, max(2, 4)) = 4\n"
"max(4, min(2, 4)) = 4\n"
"4 - 2 = 2\n"
"4 - 2 = 2\n"
"1 - 0 = 1\n"
"scale(3, 2, 1) = 1\n"
"scale(2, 2, 1) = 1\n"
"1 + 0 = 1";

EXPECT_EQ(ksn::map(0, -2, -4, 0, 1), -1) <<
"0 - (-2) = 2\n"
EXPECT_EQ(ksn::map(0, -2, -4, 0, 1), 0) <<
"min(0, max(-2, -4)) = -2\n"
"max(-2, min(-2, -4)) = -2\n"
"-2 - (-2) = 0\n"
"-4 - (-2) = -2\n"
"1 - 0 = 1\n"
"scale(2, -2, 1) = -1\n"
"-1 + 0 = -1";
"scale(0, -2, 1) = 0\n"
"0 + 0 = 0";

EXPECT_EQ(ksn::map(10, 3, 11, -2, 2), -2) <<
"min(10, max(3, 11)) = 10\n"
"max(10, min(3, 11)) = 10\n"
"10 - 3 = 7\n"
"11 - 3 = 8\n"
"2 - (-2) = 4\n"
"scale(7, 8, 4) = 0\n"
"0 + (-2) = -2";
}

TEST(NumberTest, MapFloatingPoint)
{
EXPECT_DOUBLE_EQ(ksn::map(0.5, 0.2, 0.8, 1.0, 3.2), 2.1) <<
"min(0.5, max(0.2, 0.8)) = 0.5\n"
"max(0.5, min(0.2, 0.8)) = 0.5\n"
"0.5 - 0.2 = 0.3\n"
"0.8 - 0.2 = 0.6\n"
"3.2 - 1.0 = 2.2\n"
"scale(0.3, 0.6, 2.2) = 1.1\n"
"scale(0.5, 0.6, 2.2) = 1.1\n"
"1.1 + 1.0 = 2.1";

EXPECT_DOUBLE_EQ(ksn::map(-0.1, 0.2, 0.8, -3.2, -1.0), -4.3) <<
"-0.1 - 0.2 = -0.3\n"
EXPECT_DOUBLE_EQ(ksn::map(-0.1, 0.2, 0.8, -3.2, -1.0), -3.2) <<
"min(-0.1, max(0.2, 0.8)) = -0.1\n"
"max(-0.1, min(0.2, 0.8)) = 0.2\n"
"0.2 - 0.2 = 0.0\n"
"0.8 - 0.2 = 0.6\n"
"-1.0 - (-3.2) = 2.2\n"
"scale(-0.3, 0.6, 2.2) = -1.1\n"
"-1.1 + (-3.2) = -4.3";
"scale(0.0, 0.6, 2.2) = 0.0\n"
"0.0 + (-3.2) = -3.2";

EXPECT_DOUBLE_EQ(ksn::map(-1.5, 5.0, -2.5, 7.0, 13.0), 12.2) <<
"min(-1.5, max(5.0, -2.5)) = -1.5\n"
"max(-1.5, min(5.0, -2.5)) = -1.5\n"
"-1.5 - 5.0 = -6.5\n"
"-2.5 - 5.0 = -7.5\n"
"13.0 - 7.0 = 6.0\n"
"scale(-6.5, -7.5, 6.0) = 5.2\n"
"5.2 + 7.0 = 12.2";
}

TEST(NumberTest, ClampIntegral)
Expand Down

0 comments on commit c7473d8

Please sign in to comment.