]> git.localhorst.tv Git - l2e.git/blobdiff - tests/math/FixedTest.cpp
added fixed point number type
[l2e.git] / tests / math / FixedTest.cpp
diff --git a/tests/math/FixedTest.cpp b/tests/math/FixedTest.cpp
new file mode 100644 (file)
index 0000000..a81534b
--- /dev/null
@@ -0,0 +1,117 @@
+#include "FixedTest.h"
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test_math::FixedTest);
+
+typedef math::Fixed<16> Fixed;
+typedef math::Fixed<8> LowerFixed;
+typedef math::Fixed<24> HigherFixed;
+
+
+namespace test_math {
+
+void FixedTest::setUp() {
+
+}
+
+void FixedTest::tearDown() {
+
+}
+
+
+void FixedTest::testConversion() {
+       CPPUNIT_ASSERT_EQUAL(1, Fixed(3, 2).Int());
+       CPPUNIT_ASSERT_DOUBLES_EQUAL(0.75, Fixed(3, 4).Double(), std::numeric_limits<double>::epsilon());
+
+       CPPUNIT_ASSERT_EQUAL(-1, Fixed(-3, 2).Int());
+       CPPUNIT_ASSERT_DOUBLES_EQUAL(-1.25, Fixed(-5, 4).Double(), std::numeric_limits<double>::epsilon());
+
+       CPPUNIT_ASSERT_EQUAL(Fixed(3, 2), Fixed(1.5));
+       CPPUNIT_ASSERT_EQUAL(Fixed(-4, 10), Fixed(-0.4));
+
+       CPPUNIT_ASSERT_EQUAL(Fixed(3, 2), Fixed(HigherFixed(3, 2)));
+       CPPUNIT_ASSERT_EQUAL(Fixed(3, 2), Fixed(LowerFixed(3, 2)));
+}
+
+void FixedTest::testComparison() {
+       CPPUNIT_ASSERT_EQUAL(Fixed(), Fixed());
+       CPPUNIT_ASSERT_EQUAL(Fixed(1), Fixed(1));
+       CPPUNIT_ASSERT_EQUAL(Fixed(-1), Fixed(-1));
+
+       CPPUNIT_ASSERT_EQUAL(Fixed(1, 2), Fixed(2, 4));
+
+       CPPUNIT_ASSERT(Fixed(0) != Fixed(1));
+       CPPUNIT_ASSERT(Fixed(0) != Fixed(-1));
+       CPPUNIT_ASSERT(Fixed(1, 2) != Fixed(-1, 2));
+
+       CPPUNIT_ASSERT(Fixed(0) < Fixed(1));
+       CPPUNIT_ASSERT(Fixed(1, 2) <= Fixed(1));
+       CPPUNIT_ASSERT(Fixed(0) > Fixed(-1));
+       CPPUNIT_ASSERT(Fixed(1) >= Fixed(-1, 2));
+
+       CPPUNIT_ASSERT(Fixed() == LowerFixed());
+       CPPUNIT_ASSERT(Fixed() == HigherFixed());
+       CPPUNIT_ASSERT(Fixed(1) == LowerFixed(1));
+       CPPUNIT_ASSERT(Fixed(1) == HigherFixed(1));
+       CPPUNIT_ASSERT(Fixed(-1) == LowerFixed(-1));
+       CPPUNIT_ASSERT(Fixed(-1) == HigherFixed(-1));
+
+       CPPUNIT_ASSERT(Fixed(1, 2) == LowerFixed(2, 4));
+       CPPUNIT_ASSERT(Fixed(1, 2) == HigherFixed(2, 4));
+
+       CPPUNIT_ASSERT(Fixed(0) != LowerFixed(1));
+       CPPUNIT_ASSERT(Fixed(0) != HigherFixed(1));
+       CPPUNIT_ASSERT(Fixed(0) != LowerFixed(-1));
+       CPPUNIT_ASSERT(Fixed(0) != HigherFixed(-1));
+       CPPUNIT_ASSERT(Fixed(1, 2) != LowerFixed(-1, 2));
+       CPPUNIT_ASSERT(Fixed(1, 2) != HigherFixed(-1, 2));
+
+       CPPUNIT_ASSERT(Fixed(0) < LowerFixed(1));
+       CPPUNIT_ASSERT(Fixed(0) < HigherFixed(1));
+       CPPUNIT_ASSERT(Fixed(1, 2) <= LowerFixed(1));
+       CPPUNIT_ASSERT(Fixed(1, 2) <= HigherFixed(1));
+       CPPUNIT_ASSERT(Fixed(0) > LowerFixed(-1));
+       CPPUNIT_ASSERT(Fixed(0) > HigherFixed(-1));
+       CPPUNIT_ASSERT(Fixed(1) >= LowerFixed(-1, 2));
+       CPPUNIT_ASSERT(Fixed(1) >= HigherFixed(-1, 2));
+}
+
+void FixedTest::testSum() {
+       CPPUNIT_ASSERT_EQUAL(
+                       Fixed(3, 4),
+                       Fixed(1, 4) + Fixed(1, 2));
+       CPPUNIT_ASSERT_EQUAL(
+                               Fixed(6, 4),
+                               Fixed(2) - Fixed(0.5));
+}
+
+void FixedTest::testProduct() {
+       CPPUNIT_ASSERT_EQUAL(
+                       Fixed(5),
+                       Fixed(2) * Fixed(2.5));
+       CPPUNIT_ASSERT_EQUAL(
+                       Fixed(-1.7499999999),
+                       Fixed(3, 4) * Fixed(-7, 3));
+       CPPUNIT_ASSERT_EQUAL(
+                       Fixed(4),
+                       Fixed(2) / Fixed(0.5));
+       CPPUNIT_ASSERT_EQUAL(
+                       Fixed(3),
+                       Fixed(15) / Fixed(5));
+}
+
+void FixedTest::testModulo() {
+       CPPUNIT_ASSERT_EQUAL(
+                       Fixed(5),
+                       Fixed(5) % 6);
+       CPPUNIT_ASSERT_EQUAL(
+                       Fixed(5),
+                       Fixed(11) % Fixed(6));
+       CPPUNIT_ASSERT_EQUAL(
+                       Fixed(2.5),
+                       Fixed(7.5) % 5);
+       CPPUNIT_ASSERT_EQUAL(
+                       Fixed(0.5),
+                       Fixed(8) % Fixed(7.5));
+}
+
+}