From de6b4be8b3e7a46507234b8b89da6b584dd14a40 Mon Sep 17 00:00:00 2001 From: Martchus Date: Wed, 2 Aug 2017 13:29:22 +0200 Subject: [PATCH] Test math utilities --- CMakeLists.txt | 1 + tests/mathtests.cpp | 78 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 tests/mathtests.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 5717511..ef5bc36 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,6 +70,7 @@ set(TEST_SRC_FILES tests/chronotests.cpp tests/argumentparsertests.cpp tests/traitstests.cpp + tests/mathtests.cpp ) set(CMAKE_MODULE_FILES diff --git a/tests/mathtests.cpp b/tests/mathtests.cpp new file mode 100644 index 0000000..30f0cb9 --- /dev/null +++ b/tests/mathtests.cpp @@ -0,0 +1,78 @@ +#include "../math/math.h" +#include "../tests/testutils.h" + +#include +#include + +using namespace std; +using namespace MathUtilities; +using namespace TestUtilities::Literals; + +using namespace CPPUNIT_NS; + +/*! + * \brief The MathTests class tests functions of the MathUtilities namespace. + */ +class MathTests : public TestFixture { + CPPUNIT_TEST_SUITE(MathTests); + CPPUNIT_TEST(testRandom); + CPPUNIT_TEST(testDigitsum); + CPPUNIT_TEST(testFactorial); + CPPUNIT_TEST(testPowerModulo); + CPPUNIT_TEST(testInverseModulo); + CPPUNIT_TEST(testOrderModulo); + CPPUNIT_TEST_SUITE_END(); + +public: + void setUp() + { + } + void tearDown() + { + } + + void testRandom(); + void testDigitsum(); + void testFactorial(); + void testPowerModulo(); + void testInverseModulo(); + void testOrderModulo(); +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(MathTests); + +void MathTests::testRandom() +{ + CPPUNIT_ASSERT_EQUAL(6, random(5, 7)); +} + +void MathTests::testDigitsum() +{ + CPPUNIT_ASSERT_EQUAL(0, digitsum(0)); + CPPUNIT_ASSERT_EQUAL(7, digitsum(16)); + CPPUNIT_ASSERT_EQUAL(1, digitsum(16, 16)); +} + +void MathTests::testFactorial() +{ + CPPUNIT_ASSERT_EQUAL(6, factorial(3)); +} + +void MathTests::testPowerModulo() +{ + CPPUNIT_ASSERT_EQUAL(25ul, powerModulo(5, 2, 30)); + CPPUNIT_ASSERT_EQUAL(5ul, powerModulo(5, 2, 20)); +} + +void MathTests::testInverseModulo() +{ + CPPUNIT_ASSERT_EQUAL(-12l, inverseModulo(2, 25)); + CPPUNIT_ASSERT_EQUAL(-8l, inverseModulo(3, 25)); +} + +void MathTests::testOrderModulo() +{ + CPPUNIT_ASSERT_EQUAL(20ul, orderModulo(2, 25)); + CPPUNIT_ASSERT_EQUAL(5ul, orderModulo(6, 25)); + CPPUNIT_ASSERT_EQUAL(0ul, orderModulo(5, 25)); +}