LCOV - code coverage report
Current view: top level - elsa/core/tests - test_Math.cpp (source / functions) Hit Total Coverage
Test: coverage-all.lcov Lines: 44 45 97.8 %
Date: 2022-08-25 03:05:39 Functions: 3 3 100.0 %

          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();

Generated by: LCOV version 1.14