aboutsummaryrefslogtreecommitdiff
path: root/Client/ThirdParty/fpm/tests/manip.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Client/ThirdParty/fpm/tests/manip.cpp')
-rw-r--r--Client/ThirdParty/fpm/tests/manip.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/Client/ThirdParty/fpm/tests/manip.cpp b/Client/ThirdParty/fpm/tests/manip.cpp
new file mode 100644
index 0000000..3e47640
--- /dev/null
+++ b/Client/ThirdParty/fpm/tests/manip.cpp
@@ -0,0 +1,64 @@
+#include "common.hpp"
+#include <fpm/math.hpp>
+
+TEST(manipulation, copysign)
+{
+ using P = fpm::fixed_24_8;
+
+ EXPECT_EQ(P(-13.125), copysign(P(-13.125), P(-7.25)));
+ EXPECT_EQ(P(-13.125), copysign(P( 13.125), P(-7.25)));
+ EXPECT_EQ(P( 13.125), copysign(P(-13.125), P( 7.25)));
+ EXPECT_EQ(P( 13.125), copysign(P( 13.125), P( 7.25)));
+
+ EXPECT_EQ(P(-13), copysign(P(-13), P(-7)));
+ EXPECT_EQ(P(-13), copysign(P( 13), P(-7)));
+ EXPECT_EQ(P( 13), copysign(P(-13), P( 7)));
+ EXPECT_EQ(P( 13), copysign(P( 13), P( 7)));
+}
+
+TEST(manipulation, nextafter)
+{
+ using P = fpm::fixed_16_16;
+
+ EXPECT_EQ(P(2.5), nextafter(P(2.5), P(2.5)));
+ EXPECT_EQ(P(-2.5), nextafter(P(-2.5), P(-2.5)));
+
+ EXPECT_EQ(P::from_raw_value(1), nextafter(P(0), std::numeric_limits<P>::max()));
+ EXPECT_EQ(P::from_raw_value(0x10001), nextafter(P(1), P(10)));
+ EXPECT_EQ(P::from_raw_value(-0x0ffff), nextafter(P(-1), P(10)));
+
+ EXPECT_EQ(P::from_raw_value(-1), nextafter(P(0), std::numeric_limits<P>::min()));
+ EXPECT_EQ(P::from_raw_value(0x0ffff), nextafter(P(1), P(-10)));
+ EXPECT_EQ(P::from_raw_value(-0x10001), nextafter(P(-1), P(-10)));
+}
+
+TEST(manipulation, nexttoward)
+{
+ using P = fpm::fixed_16_16;
+
+ EXPECT_EQ(P(2.5), nexttoward(P(2.5), P(2.5)));
+ EXPECT_EQ(P(-2.5), nexttoward(P(-2.5), P(-2.5)));
+
+ EXPECT_EQ(P::from_raw_value(1), nexttoward(P(0), std::numeric_limits<P>::max()));
+ EXPECT_EQ(P::from_raw_value(0x10001), nexttoward(P(1), P(10)));
+ EXPECT_EQ(P::from_raw_value(-0x0ffff), nexttoward(P(-1), P(10)));
+
+ EXPECT_EQ(P::from_raw_value(-1), nexttoward(P(0), std::numeric_limits<P>::min()));
+ EXPECT_EQ(P::from_raw_value(0x0ffff), nexttoward(P(1), P(-10)));
+ EXPECT_EQ(P::from_raw_value(-0x10001), nexttoward(P(-1), P(-10)));
+}
+
+TEST(manipulation, modf)
+{
+ using P = fpm::fixed_16_16;
+
+ P integral;
+ EXPECT_EQ(P(0), modf(P(0), &integral));
+ EXPECT_EQ(P(0), integral);
+
+ EXPECT_EQ(P(0.25), modf(P(12.25), &integral));
+ EXPECT_EQ(P(12), integral);
+
+ EXPECT_EQ(P(-0.25), modf(P(-12.25), &integral));
+ EXPECT_EQ(P(-12), integral);
+}