* Return 0 if abs(x) < limit, else returns x
This commit is contained in:
Howard Hinnant
2022-04-18 14:21:57 -04:00
committed by Elliot Lee
parent 476ee8a479
commit 24fe5f9fd0
2 changed files with 25 additions and 0 deletions

View File

@@ -325,6 +325,16 @@ root(Number f, unsigned d);
Number Number
power(Number f, unsigned n, unsigned d); power(Number f, unsigned n, unsigned d);
// Return 0 if abs(x) < limit, else returns x
inline constexpr Number
clip(Number const& x, Number const& limit) noexcept
{
if (abs(x) < limit)
return Number{};
return x;
}
} // namespace ripple } // namespace ripple
#endif // RIPPLE_BASICS_NUMBER_H_INCLUDED #endif // RIPPLE_BASICS_NUMBER_H_INCLUDED

View File

@@ -129,6 +129,7 @@ public:
void void
test_to_integer() test_to_integer()
{ {
testcase("test_to_integer");
Number x[]{ Number x[]{
Number{0}, Number{0},
Number{1}, Number{1},
@@ -195,6 +196,19 @@ public:
} }
} }
void
test_clip()
{
testcase("test_clip");
Number limit{1, -6};
BEAST_EXPECT((clip(Number{2, -6}, limit) == Number{2, -6}));
BEAST_EXPECT((clip(Number{1, -6}, limit) == Number{1, -6}));
BEAST_EXPECT((clip(Number{9, -7}, limit) == Number{0}));
BEAST_EXPECT((clip(Number{-2, -6}, limit) == Number{-2, -6}));
BEAST_EXPECT((clip(Number{-1, -6}, limit) == Number{-1, -6}));
BEAST_EXPECT((clip(Number{-9, -7}, limit) == Number{0}));
}
void void
run() override run() override
{ {
@@ -205,6 +219,7 @@ public:
test_root(); test_root();
testConversions(); testConversions();
test_to_integer(); test_to_integer();
test_clip();
} }
}; };