GCC Code Coverage Report


Directory: ./
File: unittest/sincos.cpp
Date: 2025-02-12 21:03:38
Exec Total Coverage
Lines: 20 20 100.0%
Branches: 45 88 51.1%

Line Branch Exec Source
1 //
2 // Copyright (c) 2018-2019 INRIA
3 //
4
5 #include "pinocchio/fwd.hpp"
6 #include "pinocchio/math/sincos.hpp"
7 #include <cstdlib>
8
9 #include "utils/macros.hpp"
10
11 #include <boost/test/unit_test.hpp>
12 #include <boost/utility/binary.hpp>
13
14 namespace
15 {
16 template<typename Scalar>
17 Scalar sinCosTolerance();
18
19 template<>
20 2000 inline float sinCosTolerance<float>()
21 {
22 // I don't know how tolerance has been calculated.
23 // 1e-7 doesn't work on ARM + Debug architecture.
24 2000 return 1.5e-7f;
25 }
26
27 template<>
28 2000 inline double sinCosTolerance<double>()
29 {
30 2000 return 1e-15;
31 }
32
33 template<>
34 2000 inline long double sinCosTolerance<long double>()
35 {
36 2000 return 1e-19;
37 }
38 } // namespace
39
40 template<typename Scalar>
41 6 void testSINCOS(int n)
42 {
43
2/2
✓ Branch 0 taken 3000 times.
✓ Branch 1 taken 3 times.
6006 for (int k = 0; k < n; ++k)
44 {
45 Scalar sin_value, cos_value;
46 6000 Scalar alpha = (Scalar)std::rand() / (Scalar)RAND_MAX;
47 6000 pinocchio::SINCOS(alpha, &sin_value, &cos_value);
48
49 6000 Scalar sin_value_ref = std::sin(alpha), cos_value_ref = std::cos(alpha);
50
51
5/10
✓ Branch 1 taken 3000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3000 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 3000 times.
6000 BOOST_CHECK_CLOSE_FRACTION(sin_value, sin_value_ref, sinCosTolerance<Scalar>());
52
5/10
✓ Branch 1 taken 3000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3000 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 3000 times.
6000 BOOST_CHECK_CLOSE_FRACTION(cos_value, cos_value_ref, sinCosTolerance<Scalar>());
53 }
54 6 }
55
56 BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE)
57
58
33/66
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
4 BOOST_AUTO_TEST_CASE(test_sincos)
59 {
60 #ifndef NDEBUG
61 2 const int n = 1e3;
62 #else
63 const int n = 1e6;
64 #endif
65 2 testSINCOS<float>(n);
66 2 testSINCOS<double>(n);
67 2 testSINCOS<long double>(n);
68 2 }
69
70 BOOST_AUTO_TEST_SUITE_END()
71