From: <sv...@op...> - 2024-12-18 15:07:58
|
Author: manx Date: Wed Dec 18 16:07:45 2024 New Revision: 22566 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22566 Log: [Ref] mpt/base/math.hpp: Add mpt::trunc. DJGPP is missing std::trunc. [Ref] mpt/base/tests/tests_base_math.hpp: Add trivial tests for mpt::trunc, std::ceil, and std::floor. Modified: trunk/OpenMPT/src/mpt/base/math.hpp trunk/OpenMPT/src/mpt/base/tests/tests_base_math.hpp Modified: trunk/OpenMPT/src/mpt/base/math.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/base/math.hpp Tue Dec 17 23:12:57 2024 (r22565) +++ trunk/OpenMPT/src/mpt/base/math.hpp Wed Dec 18 16:07:45 2024 (r22566) @@ -63,6 +63,28 @@ #endif // MPT_OS_DJGPP +#if MPT_OS_DJGPP + +inline long double trunc(const long double val) { + return ::truncl(val); +} + +inline double trunc(const double val) { + return ::trunc(val); +} + +inline float trunc(const float val) { + return ::truncf(val); +} + +#else // !MPT_OS_DJGPP + +// C++11 std::trunc +using std::trunc; + +#endif // MPT_OS_DJGPP + + template <typename T> inline T sanitize_nan(T val) { static_assert(std::is_floating_point<T>::value); Modified: trunk/OpenMPT/src/mpt/base/tests/tests_base_math.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/base/tests/tests_base_math.hpp Tue Dec 17 23:12:57 2024 (r22565) +++ trunk/OpenMPT/src/mpt/base/tests/tests_base_math.hpp Wed Dec 18 16:07:45 2024 (r22566) @@ -11,6 +11,8 @@ #include "mpt/test/test.hpp" #include "mpt/test/test_macros.hpp" +#include <cmath> + namespace mpt { @@ -31,6 +33,14 @@ #pragma clang diagnostic pop #endif { + MPT_TEST_EXPECT_EQUAL(mpt::round(1.99f), 2.0f); + MPT_TEST_EXPECT_EQUAL(mpt::round(1.5f), 2.0f); + MPT_TEST_EXPECT_EQUAL(mpt::round(1.1f), 1.0f); + MPT_TEST_EXPECT_EQUAL(mpt::round(-0.1f), 0.0f); + MPT_TEST_EXPECT_EQUAL(mpt::round(-0.5f), -1.0f); + MPT_TEST_EXPECT_EQUAL(mpt::round(-0.9f), -1.0f); + MPT_TEST_EXPECT_EQUAL(mpt::round(-1.4f), -1.0f); + MPT_TEST_EXPECT_EQUAL(mpt::round(-1.7f), -2.0f); MPT_TEST_EXPECT_EQUAL(mpt::round(1.99), 2.0); MPT_TEST_EXPECT_EQUAL(mpt::round(1.5), 2.0); MPT_TEST_EXPECT_EQUAL(mpt::round(1.1), 1.0); @@ -39,6 +49,89 @@ MPT_TEST_EXPECT_EQUAL(mpt::round(-0.9), -1.0); MPT_TEST_EXPECT_EQUAL(mpt::round(-1.4), -1.0); MPT_TEST_EXPECT_EQUAL(mpt::round(-1.7), -2.0); + MPT_TEST_EXPECT_EQUAL(mpt::round(1.99l), 2.0l); + MPT_TEST_EXPECT_EQUAL(mpt::round(1.5l), 2.0l); + MPT_TEST_EXPECT_EQUAL(mpt::round(1.1l), 1.0l); + MPT_TEST_EXPECT_EQUAL(mpt::round(-0.1l), 0.0l); + MPT_TEST_EXPECT_EQUAL(mpt::round(-0.5l), -1.0l); + MPT_TEST_EXPECT_EQUAL(mpt::round(-0.9l), -1.0l); + MPT_TEST_EXPECT_EQUAL(mpt::round(-1.4l), -1.0l); + MPT_TEST_EXPECT_EQUAL(mpt::round(-1.7l), -2.0l); + + MPT_TEST_EXPECT_EQUAL(std::ceil(1.99f), 2.0f); + MPT_TEST_EXPECT_EQUAL(std::ceil(1.5f), 2.0f); + MPT_TEST_EXPECT_EQUAL(std::ceil(1.1f), 2.0f); + MPT_TEST_EXPECT_EQUAL(std::ceil(-0.1f), 0.0f); + MPT_TEST_EXPECT_EQUAL(std::ceil(-0.5f), 0.0f); + MPT_TEST_EXPECT_EQUAL(std::ceil(-0.9f), 0.0f); + MPT_TEST_EXPECT_EQUAL(std::ceil(-1.4f), -1.0f); + MPT_TEST_EXPECT_EQUAL(std::ceil(-1.7f), -1.0f); + MPT_TEST_EXPECT_EQUAL(std::ceil(1.99), 2.0); + MPT_TEST_EXPECT_EQUAL(std::ceil(1.5), 2.0); + MPT_TEST_EXPECT_EQUAL(std::ceil(1.1), 2.0); + MPT_TEST_EXPECT_EQUAL(std::ceil(-0.1), 0.0); + MPT_TEST_EXPECT_EQUAL(std::ceil(-0.5), 0.0); + MPT_TEST_EXPECT_EQUAL(std::ceil(-0.9), 0.0); + MPT_TEST_EXPECT_EQUAL(std::ceil(-1.4), -1.0); + MPT_TEST_EXPECT_EQUAL(std::ceil(-1.7), -1.0); + MPT_TEST_EXPECT_EQUAL(std::ceil(1.99l), 2.0l); + MPT_TEST_EXPECT_EQUAL(std::ceil(1.5l), 2.0l); + MPT_TEST_EXPECT_EQUAL(std::ceil(1.1l), 2.0l); + MPT_TEST_EXPECT_EQUAL(std::ceil(-0.1l), 0.0l); + MPT_TEST_EXPECT_EQUAL(std::ceil(-0.5l), 0.0l); + MPT_TEST_EXPECT_EQUAL(std::ceil(-0.9l), 0.0l); + MPT_TEST_EXPECT_EQUAL(std::ceil(-1.4l), -1.0l); + MPT_TEST_EXPECT_EQUAL(std::ceil(-1.7l), -1.0l); + + MPT_TEST_EXPECT_EQUAL(std::floor(1.99f), 1.0f); + MPT_TEST_EXPECT_EQUAL(std::floor(1.5f), 1.0f); + MPT_TEST_EXPECT_EQUAL(std::floor(1.1f), 1.0f); + MPT_TEST_EXPECT_EQUAL(std::floor(-0.1f), -1.0f); + MPT_TEST_EXPECT_EQUAL(std::floor(-0.5f), -1.0f); + MPT_TEST_EXPECT_EQUAL(std::floor(-0.9f), -1.0f); + MPT_TEST_EXPECT_EQUAL(std::floor(-1.4f), -2.0f); + MPT_TEST_EXPECT_EQUAL(std::floor(-1.7f), -2.0f); + MPT_TEST_EXPECT_EQUAL(std::floor(1.99), 1.0); + MPT_TEST_EXPECT_EQUAL(std::floor(1.5), 1.0); + MPT_TEST_EXPECT_EQUAL(std::floor(1.1), 1.0); + MPT_TEST_EXPECT_EQUAL(std::floor(-0.1), -1.0); + MPT_TEST_EXPECT_EQUAL(std::floor(-0.5), -1.0); + MPT_TEST_EXPECT_EQUAL(std::floor(-0.9), -1.0); + MPT_TEST_EXPECT_EQUAL(std::floor(-1.4), -2.0); + MPT_TEST_EXPECT_EQUAL(std::floor(-1.7), -2.0); + MPT_TEST_EXPECT_EQUAL(std::floor(1.99l), 1.0l); + MPT_TEST_EXPECT_EQUAL(std::floor(1.5l), 1.0l); + MPT_TEST_EXPECT_EQUAL(std::floor(1.1l), 1.0l); + MPT_TEST_EXPECT_EQUAL(std::floor(-0.1l), -1.0l); + MPT_TEST_EXPECT_EQUAL(std::floor(-0.5l), -1.0l); + MPT_TEST_EXPECT_EQUAL(std::floor(-0.9l), -1.0l); + MPT_TEST_EXPECT_EQUAL(std::floor(-1.4l), -2.0l); + MPT_TEST_EXPECT_EQUAL(std::floor(-1.7l), -2.0l); + + MPT_TEST_EXPECT_EQUAL(mpt::trunc(1.99f), 1.0f); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(1.5f), 1.0f); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(1.1f), 1.0f); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-0.1f), 0.0f); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-0.5f), 0.0f); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-0.9f), 0.0f); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-1.4f), -1.0f); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-1.7f), -1.0f); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(1.99), 1.0); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(1.5), 1.0); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(1.1), 1.0); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-0.1), 0.0); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-0.5), 0.0); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-0.9), 0.0); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-1.4), -1.0); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-1.7), -1.0); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(1.99l), 1.0l); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(1.5l), 1.0l); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(1.1l), 1.0l); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-0.1l), 0.0l); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-0.5l), 0.0l); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-0.9l), 0.0l); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-1.4l), -1.0l); + MPT_TEST_EXPECT_EQUAL(mpt::trunc(-1.7l), -1.0l); } } // namespace math |