diff --git a/firmware/util/efilib.h b/firmware/util/efilib.h index fd3858e6a8..7bffa3fa72 100644 --- a/firmware/util/efilib.h +++ b/firmware/util/efilib.h @@ -86,6 +86,8 @@ float expf_taylor(float x); #include +#define IS_NEGATIVE_ZERO(value) (std::signbit(value) && value==0) + // C++ helpers go here namespace efi { diff --git a/unit_tests/tests/test_util.cpp b/unit_tests/tests/test_util.cpp index 1d312ab6d7..379d1c5690 100644 --- a/unit_tests/tests/test_util.cpp +++ b/unit_tests/tests/test_util.cpp @@ -28,6 +28,14 @@ #include "gtest/gtest.h" +TEST(util, negativeZero) { + ASSERT_TRUE(IS_NEGATIVE_ZERO(-0.0)); + + ASSERT_FALSE(IS_NEGATIVE_ZERO(-10.0)); + ASSERT_FALSE(IS_NEGATIVE_ZERO(10.0)); + ASSERT_FALSE(IS_NEGATIVE_ZERO(0.0)); +} + TEST(util, crc) { ASSERT_EQ(4, efiRound(4.4, 1)); ASSERT_FLOAT_EQ(1.2, efiRound(1.2345, 0.1));