From da546bebb8601192cb7fa8ff30a840a1c43b0e03 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Mon, 25 Aug 2025 21:34:13 -0500 Subject: MathUtil: Simplify SaturatingCast implementation with std::cmp_less/cmp_greater and fix a floating point edge case. Thanks to Dentomologist for catching the edge case. --- Source/UnitTests/Common/MathUtilTest.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'Source/UnitTests/Common/MathUtilTest.cpp') diff --git a/Source/UnitTests/Common/MathUtilTest.cpp b/Source/UnitTests/Common/MathUtilTest.cpp index 966f3a4445..c60c19e6a1 100644 --- a/Source/UnitTests/Common/MathUtilTest.cpp +++ b/Source/UnitTests/Common/MathUtilTest.cpp @@ -66,6 +66,13 @@ TEST(MathUtil, SaturatingCast) // 16777217 = 2^24 + 1 is the first integer that cannot be represented correctly with a f32. EXPECT_EQ(16777216, MathUtil::SaturatingCast(float(16777216))); EXPECT_EQ(16777216, MathUtil::SaturatingCast(float(16777217))); + + // Note that values in the range [2147483584, 2147483776] have an equivalent float representation. + EXPECT_EQ(std::numeric_limits::max(), MathUtil::SaturatingCast(2147483648.f)); + EXPECT_EQ(std::numeric_limits::min(), MathUtil::SaturatingCast(-2147483649.f)); + + // Cast from a signed integer type to a smaller signed integer type + EXPECT_EQ(-128, (MathUtil::SaturatingCast(-129))); } TEST(MathUtil, RectangleEquality) -- cgit v1.2.3