From 6dcb0817a2cd1a507dbf5e3c42bf13623b5b5cae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joshua=20Vanda=C3=ABle?= Date: Sun, 28 Jun 2026 08:33:40 +0200 Subject: MathUtil: C++20/23 modernisations I've also created DegreesToRadians/RadiansToDegrees utility functions since there was a lot of repeated code --- Source/UnitTests/Common/MathUtilTest.cpp | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'Source/UnitTests/Common/MathUtilTest.cpp') diff --git a/Source/UnitTests/Common/MathUtilTest.cpp b/Source/UnitTests/Common/MathUtilTest.cpp index c60c19e6a1..1725cf47cd 100644 --- a/Source/UnitTests/Common/MathUtilTest.cpp +++ b/Source/UnitTests/Common/MathUtilTest.cpp @@ -5,6 +5,32 @@ #include "Common/MathUtil.h" +TEST(MathUtil, DegreesToRadians) +{ + EXPECT_EQ(0.0, MathUtil::DegreesToRadians(0.0)); + EXPECT_EQ(std::numbers::pi_v, MathUtil::DegreesToRadians(180.0)); + EXPECT_EQ(std::numbers::pi_v / 2, MathUtil::DegreesToRadians(90.0)); + EXPECT_EQ(std::numbers::pi_v / 4, MathUtil::DegreesToRadians(45.0)); + EXPECT_EQ(2 * std::numbers::pi_v, MathUtil::DegreesToRadians(360.0)); + + // Negative angles + EXPECT_EQ(-std::numbers::pi_v / 2, MathUtil::DegreesToRadians(-90.0)); + EXPECT_EQ(-std::numbers::pi_v, MathUtil::DegreesToRadians(-180.0)); +} + +TEST(MathUtil, RadiansToDegrees) +{ + EXPECT_EQ(0.0, MathUtil::RadiansToDegrees(0.0)); + EXPECT_EQ(180.0, MathUtil::RadiansToDegrees(std::numbers::pi_v)); + EXPECT_EQ(90.0, MathUtil::RadiansToDegrees(std::numbers::pi_v / 2)); + EXPECT_EQ(45.0, MathUtil::RadiansToDegrees(std::numbers::pi_v / 4)); + EXPECT_EQ(360.0, MathUtil::RadiansToDegrees(2 * std::numbers::pi_v)); + + // Negative angles + EXPECT_EQ(-90.0, MathUtil::RadiansToDegrees(-std::numbers::pi_v / 2)); + EXPECT_EQ(-180.0, MathUtil::RadiansToDegrees(-std::numbers::pi_v)); +} + TEST(MathUtil, IntLog2) { EXPECT_EQ(0, MathUtil::IntLog2(1)); @@ -18,8 +44,23 @@ TEST(MathUtil, IntLog2) EXPECT_EQ(63, MathUtil::IntLog2(0xFFFFFFFFFFFFFFFFull)); } +TEST(MathUtil, IsPow2) +{ + EXPECT_FALSE(MathUtil::IsPow2(std::numeric_limits::min())); + EXPECT_FALSE(MathUtil::IsPow2(-2)); + EXPECT_FALSE(MathUtil::IsPow2(-1)); + EXPECT_FALSE(MathUtil::IsPow2(0)); + EXPECT_TRUE(MathUtil::IsPow2(1)); + EXPECT_TRUE(MathUtil::IsPow2(2)); + EXPECT_FALSE(MathUtil::IsPow2(3)); + EXPECT_TRUE(MathUtil::IsPow2(4)); + EXPECT_FALSE(MathUtil::IsPow2(5)); + EXPECT_FALSE(MathUtil::IsPow2(std::numeric_limits::max())); +} + TEST(MathUtil, NextPowerOf2) { + EXPECT_EQ(1U, MathUtil::NextPowerOf2(0)); EXPECT_EQ(4U, MathUtil::NextPowerOf2(3)); EXPECT_EQ(4U, MathUtil::NextPowerOf2(4)); EXPECT_EQ(8U, MathUtil::NextPowerOf2(6)); -- cgit v1.2.3