2022-02-11 10:56:47 +01:00
|
|
|
#include "Catch2.h"
|
|
|
|
#include <Eule/Math.h>
|
2021-11-15 16:10:07 +01:00
|
|
|
#include <stdexcept>
|
|
|
|
|
2022-03-06 20:05:34 +01:00
|
|
|
using namespace Leonetienne::Eule;
|
2021-11-15 16:10:07 +01:00
|
|
|
|
|
|
|
/** Equivalence classes:
|
|
|
|
* a -> numerator
|
|
|
|
* b -> denominator
|
|
|
|
* -- a > 0 && b > 0
|
|
|
|
* -- a < 0 && b > 0
|
|
|
|
* -- a > 0 && b < 0
|
|
|
|
* -- a < 0 && b < 0
|
|
|
|
*
|
|
|
|
* -- a > 0 && b = 0
|
|
|
|
* -- a = 0 && b > 0
|
|
|
|
* * -- a < 0 && b = 0
|
|
|
|
* -- a = 0 && b < 0
|
|
|
|
* -- a = 0 && b = 0
|
|
|
|
*/
|
|
|
|
|
2022-02-11 10:56:47 +01:00
|
|
|
// a > 0 && b > 0
|
|
|
|
TEST_CASE(__FILE__"/a_gt_0_and_b_gt_0", "[Math][Mod]")
|
2021-11-15 16:10:07 +01:00
|
|
|
{
|
2022-02-11 10:56:47 +01:00
|
|
|
REQUIRE(Math::Mod(199, 32) == 7);
|
|
|
|
return;
|
|
|
|
}
|
2021-11-15 16:10:07 +01:00
|
|
|
|
2022-02-11 10:56:47 +01:00
|
|
|
// a < 0 && b > 0
|
|
|
|
TEST_CASE(__FILE__"/a_lt_0_and_b_gt_0", "[Math][Mod]")
|
|
|
|
{
|
|
|
|
REQUIRE(Math::Mod(-199, 32) == 25);
|
|
|
|
return;
|
|
|
|
}
|
2021-11-15 16:10:07 +01:00
|
|
|
|
2022-02-11 10:56:47 +01:00
|
|
|
// a > 0 && b < 0
|
|
|
|
TEST_CASE(__FILE__"/a_gt_0_and_b_lt_0", "[Math][Mod]")
|
|
|
|
{
|
|
|
|
REQUIRE(Math::Mod(199, -32) == -25);
|
|
|
|
return;
|
|
|
|
}
|
2021-11-15 16:10:07 +01:00
|
|
|
|
2022-02-11 10:56:47 +01:00
|
|
|
// a > 0 && b = 0
|
|
|
|
TEST_CASE(__FILE__"/a_gt_0_and_b_eq_0", "[Math][Mod]")
|
|
|
|
{
|
|
|
|
// Exppect divide-by-zero
|
|
|
|
REQUIRE_THROWS_AS(Math::Mod(-199, 0), std::logic_error);
|
|
|
|
return;
|
|
|
|
}
|
2021-11-15 16:10:07 +01:00
|
|
|
|
2022-02-11 10:56:47 +01:00
|
|
|
// a = 0 && b > 0
|
|
|
|
TEST_CASE(__FILE__"/a_eq_0_and_b_gt_0", "[Math][Mod]")
|
|
|
|
{
|
|
|
|
REQUIRE(Math::Mod(0, 32) == 0);
|
|
|
|
return;
|
|
|
|
}
|
2021-11-15 16:10:07 +01:00
|
|
|
|
2022-02-11 10:56:47 +01:00
|
|
|
// a < 0 && b = 0
|
|
|
|
TEST_CASE(__FILE__"/a_lt_0_and_b_eq_0", "[Math][Mod]")
|
|
|
|
{
|
|
|
|
// Expect divide-by-zero
|
|
|
|
REQUIRE_THROWS_AS(Math::Mod(-199, 0), std::logic_error);
|
|
|
|
return;
|
|
|
|
}
|
2021-11-15 16:10:07 +01:00
|
|
|
|
2022-02-11 10:56:47 +01:00
|
|
|
// a = 0 && b < 0
|
|
|
|
TEST_CASE(__FILE__"/a_eq_0_and_b_lt_0", "[Math][Mod]")
|
|
|
|
{
|
|
|
|
REQUIRE(Math::Mod(0, -32) == 0);
|
|
|
|
return;
|
2021-11-15 16:10:07 +01:00
|
|
|
}
|