diff --git a/src/lib/mathlib/math/Functions.hpp b/src/lib/mathlib/math/Functions.hpp index 6602a71c7b..13de8e8ad7 100644 --- a/src/lib/mathlib/math/Functions.hpp +++ b/src/lib/mathlib/math/Functions.hpp @@ -54,6 +54,17 @@ int signNoZero(T val) return (T(0) <= val) - (val < T(0)); } +/** + * Sign function based on a boolean + * + * @param[in] positive Truth value to take the sign from + * @return 1 if positive is true, -1 if positive is false + */ +inline int signFromBool(bool positive) +{ + return positive ? 1 : -1; +} + template T sq(T val) { diff --git a/src/lib/mathlib/math/FunctionsTest.cpp b/src/lib/mathlib/math/FunctionsTest.cpp index 49fd5dee6b..48ac63fcec 100644 --- a/src/lib/mathlib/math/FunctionsTest.cpp +++ b/src/lib/mathlib/math/FunctionsTest.cpp @@ -47,6 +47,15 @@ TEST(FunctionsTest, signNoZero) EXPECT_FLOAT_EQ(signNoZero(123.456f), 1.f); } +TEST(FunctionsTest, signFromBool) +{ + EXPECT_EQ(signFromBool(true), 1); + EXPECT_EQ(signFromBool(false), -1); + EXPECT_EQ(signFromBool(100), 1); + EXPECT_EQ(signFromBool(-100), 1); + EXPECT_EQ(signFromBool(0), -1); +} + TEST(FunctionsTest, expo) { // input value limits