Line data Source code
1 : #include "doctest/doctest.h"
2 :
3 : #include "Math.hpp"
4 :
5 : TEST_SUITE_BEGIN("Math");
6 :
7 : using namespace elsa;
8 :
9 : TEST_CASE("Math::factorial")
10 1 : {
11 1 : CHECK_EQ(1, math::factorial(0));
12 1 : CHECK_EQ(1, math::factorial(1));
13 :
14 1 : auto fac = 1;
15 10 : for (int i = 1; i < 10; ++i) {
16 9 : fac *= i;
17 9 : CHECK_EQ(fac, math::factorial(i));
18 9 : }
19 1 : }
20 :
21 : TEST_CASE("Math::binom")
22 2 : {
23 2 : GIVEN("n == 10")
24 2 : {
25 2 : const index_t n = 10;
26 :
27 2 : WHEN("k larger than n") { CHECK_EQ(math::binom(n, 15), 0); }
28 :
29 2 : WHEN("k == 0 or k == n")
30 2 : {
31 1 : CHECK_EQ(math::binom(n, 0), 1);
32 1 : CHECK_EQ(math::binom(n, 10), 1);
33 1 : }
34 :
35 2 : CHECK_EQ(math::binom(n, 1), 10);
36 2 : CHECK_EQ(math::binom(n, 2), 45);
37 2 : CHECK_EQ(math::binom(n, 3), 120);
38 2 : CHECK_EQ(math::binom(n, 4), 210);
39 2 : CHECK_EQ(math::binom(n, 5), 252);
40 2 : CHECK_EQ(math::binom(n, 6), 210);
41 2 : CHECK_EQ(math::binom(n, 7), 120);
42 2 : CHECK_EQ(math::binom(n, 8), 45);
43 2 : CHECK_EQ(math::binom(n, 9), 10);
44 2 : }
45 2 : }
46 :
47 : TEST_CASE("Math::heaviside")
48 1 : {
49 1 : constexpr index_t size = 200;
50 1 : constexpr real_t c = 0.5;
51 1 : const auto linspace = Vector_t<real_t>::LinSpaced(size, -2, 2);
52 :
53 201 : for (std::size_t i = 0; i < size; ++i) {
54 200 : auto res = math::heaviside(linspace[i], c);
55 200 : if (linspace[i] == 0.) {
56 0 : CHECK_EQ(res, c);
57 200 : } else if (linspace[i] < 0) {
58 100 : CHECK_EQ(res, 0);
59 100 : } else if (linspace[i] > 0) {
60 100 : CHECK_EQ(res, 1);
61 100 : }
62 200 : }
63 1 : }
64 :
65 : TEST_SUITE_END();
|