GCC Code Coverage Report


Directory: ./
File: unittest/test_friction_cone.cpp
Date: 2025-03-26 19:23:43
Exec Total Coverage
Lines: 206 206 100.0%
Branches: 804 1588 50.6%

Line Branch Exec Source
1 ///////////////////////////////////////////////////////////////////////////////
2 // BSD 3-Clause License
3 //
4 // Copyright (C) 2019-2025, University of Edinburgh, University of Oxford,
5 // Heriot-Watt University
6 // Copyright note valid unless otherwise stated in individual files.
7 // All rights reserved.
8 ///////////////////////////////////////////////////////////////////////////////
9
10 #define BOOST_TEST_NO_MAIN
11 #define BOOST_TEST_ALTERNATIVE_INIT_API
12
13 #include <pinocchio/math/quaternion.hpp>
14
15 #include "crocoddyl/core/activations/quadratic-barrier.hpp"
16 #include "crocoddyl/multibody/friction-cone.hpp"
17 #include "unittest_common.hpp"
18
19 using namespace boost::unit_test;
20 using namespace crocoddyl::unittest;
21
22 1 void test_constructor() {
23 // Common parameters
24
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 double mu = random_real_in_range(0.01, 1.);
25
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::size_t nf = 2 * random_int_in_range(2, 16);
26 1 bool inner_appr = false;
27
28 // No rotation
29
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 Eigen::Matrix3d R = Eigen::Matrix3d::Identity();
30
31 // Create the friction cone with rotation and surface normal
32
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 crocoddyl::FrictionCone cone(R, mu, nf, inner_appr);
33
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 crocoddyl::FrictionCone casted_cone = cone.cast<double>();
34
35
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
1 BOOST_CHECK(cone.get_R().isApprox(R));
36
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
1 BOOST_CHECK(cone.get_mu() == mu);
37
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
1 BOOST_CHECK(cone.get_nf() == nf);
38
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
1 BOOST_CHECK(cone.get_inner_appr() == inner_appr);
39
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
1 BOOST_CHECK(static_cast<std::size_t>(cone.get_A().rows()) == nf + 1);
40
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
1 BOOST_CHECK(static_cast<std::size_t>(cone.get_lb().size()) == nf + 1);
41
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
1 BOOST_CHECK(static_cast<std::size_t>(cone.get_ub().size()) == nf + 1);
42
43 // Checking that casted computation is the same
44
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
1 BOOST_CHECK(casted_cone.get_R().isApprox(R));
45
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
1 BOOST_CHECK(casted_cone.get_mu() == mu);
46
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
1 BOOST_CHECK(casted_cone.get_nf() == nf);
47
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
1 BOOST_CHECK(casted_cone.get_inner_appr() == inner_appr);
48
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
1 BOOST_CHECK(static_cast<std::size_t>(casted_cone.get_A().rows()) == nf + 1);
49
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
1 BOOST_CHECK(static_cast<std::size_t>(casted_cone.get_lb().size()) == nf + 1);
50
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
1 BOOST_CHECK(static_cast<std::size_t>(casted_cone.get_ub().size()) == nf + 1);
51
52 // With rotation
53
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 Eigen::Quaterniond q;
54
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 pinocchio::quaternion::uniformRandom(q);
55
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 R = q.toRotationMatrix();
56
57 // Create the friction cone
58
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 cone = crocoddyl::FrictionCone(R, mu, nf, inner_appr);
59
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 casted_cone = cone.cast<double>();
60
61
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
1 BOOST_CHECK(cone.get_R().isApprox(R));
62
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
1 BOOST_CHECK(cone.get_mu() == mu);
63
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
1 BOOST_CHECK(cone.get_nf() == nf);
64
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
1 BOOST_CHECK(cone.get_inner_appr() == inner_appr);
65
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
1 BOOST_CHECK(static_cast<std::size_t>(cone.get_A().rows()) == nf + 1);
66
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
1 BOOST_CHECK(static_cast<std::size_t>(cone.get_lb().size()) == nf + 1);
67
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
1 BOOST_CHECK(static_cast<std::size_t>(cone.get_ub().size()) == nf + 1);
68
69 // Checking that casted computation is the same
70
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
1 BOOST_CHECK(casted_cone.get_R().isApprox(R));
71
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
1 BOOST_CHECK(casted_cone.get_mu() == mu);
72
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
1 BOOST_CHECK(casted_cone.get_nf() == nf);
73
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
1 BOOST_CHECK(casted_cone.get_inner_appr() == inner_appr);
74
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
1 BOOST_CHECK(static_cast<std::size_t>(casted_cone.get_A().rows()) == nf + 1);
75
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
1 BOOST_CHECK(static_cast<std::size_t>(casted_cone.get_lb().size()) == nf + 1);
76
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
1 BOOST_CHECK(static_cast<std::size_t>(casted_cone.get_ub().size()) == nf + 1);
77
78 // Create the friction cone from a reference
79 {
80
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 crocoddyl::FrictionCone cone_reference(cone);
81
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 casted_cone = cone_reference.cast<double>();
82
83
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
1 BOOST_CHECK(cone.get_nf() == cone_reference.get_nf());
84
9/18
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
1 BOOST_CHECK(cone.get_A().isApprox(cone_reference.get_A()));
85
3/4
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 31 times.
✓ Branch 5 taken 1 times.
32 for (std::size_t i = 0; i < static_cast<std::size_t>(cone.get_ub().size());
86 ++i) {
87
10/20
✓ Branch 1 taken 31 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 31 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 31 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 31 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 31 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 31 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 31 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 31 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 31 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 31 times.
31 BOOST_CHECK(cone.get_ub()[i] == cone_reference.get_ub()[i]);
88
10/20
✓ Branch 1 taken 31 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 31 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 31 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 31 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 31 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 31 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 31 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 31 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 31 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 31 times.
31 BOOST_CHECK(cone.get_lb()[i] == cone_reference.get_lb()[i]);
89 }
90
9/18
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
1 BOOST_CHECK(cone.get_R().isApprox(cone_reference.get_R()));
91
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
1 BOOST_CHECK(std::abs(cone.get_mu() - cone_reference.get_mu()) < 1e-9);
92
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
1 BOOST_CHECK(cone.get_inner_appr() == cone_reference.get_inner_appr());
93
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
1 BOOST_CHECK(std::abs(cone.get_min_nforce() -
94 cone_reference.get_min_nforce()) < 1e-9);
95
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
1 BOOST_CHECK(cone.get_max_nforce() == cone_reference.get_max_nforce());
96
97 // Checking that casted computation is the same
98
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
1 BOOST_CHECK(casted_cone.get_nf() == cone_reference.get_nf());
99
9/18
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
1 BOOST_CHECK(casted_cone.get_A().isApprox(cone_reference.get_A()));
100
3/4
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 31 times.
✓ Branch 5 taken 1 times.
32 for (std::size_t i = 0; i < static_cast<std::size_t>(cone.get_ub().size());
101 ++i) {
102
10/20
✓ Branch 1 taken 31 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 31 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 31 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 31 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 31 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 31 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 31 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 31 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 31 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 31 times.
31 BOOST_CHECK(casted_cone.get_ub()[i] == cone_reference.get_ub()[i]);
103
10/20
✓ Branch 1 taken 31 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 31 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 31 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 31 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 31 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 31 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 31 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 31 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 31 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 31 times.
31 BOOST_CHECK(casted_cone.get_lb()[i] == cone_reference.get_lb()[i]);
104 }
105
9/18
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
1 BOOST_CHECK(casted_cone.get_R().isApprox(cone_reference.get_R()));
106
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
1 BOOST_CHECK(std::abs(casted_cone.get_mu() - cone_reference.get_mu()) <
107 1e-9);
108
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
1 BOOST_CHECK(cone.get_inner_appr() == cone_reference.get_inner_appr());
109
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
1 BOOST_CHECK(std::abs(casted_cone.get_min_nforce() -
110 cone_reference.get_min_nforce()) < 1e-9);
111
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
1 BOOST_CHECK(casted_cone.get_max_nforce() ==
112 cone_reference.get_max_nforce());
113 1 }
114
115 // Create the friction cone through the copy operator
116 {
117
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 crocoddyl::FrictionCone cone_copy;
118
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cone_copy = cone;
119
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 casted_cone = cone_copy.cast<double>();
120
121
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
1 BOOST_CHECK(cone.get_nf() == cone_copy.get_nf());
122
9/18
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
1 BOOST_CHECK(cone.get_A().isApprox(cone_copy.get_A()));
123
3/4
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 31 times.
✓ Branch 5 taken 1 times.
32 for (std::size_t i = 0; i < static_cast<std::size_t>(cone.get_ub().size());
124 ++i) {
125
10/20
✓ Branch 1 taken 31 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 31 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 31 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 31 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 31 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 31 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 31 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 31 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 31 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 31 times.
31 BOOST_CHECK(cone.get_ub()[i] == cone_copy.get_ub()[i]);
126
10/20
✓ Branch 1 taken 31 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 31 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 31 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 31 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 31 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 31 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 31 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 31 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 31 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 31 times.
31 BOOST_CHECK(cone.get_lb()[i] == cone_copy.get_lb()[i]);
127 }
128
9/18
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
1 BOOST_CHECK(cone.get_R().isApprox(cone_copy.get_R()));
129
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
1 BOOST_CHECK(std::abs(cone.get_mu() - cone_copy.get_mu()) < 1e-9);
130
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
1 BOOST_CHECK(cone.get_inner_appr() == cone_copy.get_inner_appr());
131
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
1 BOOST_CHECK(std::abs(cone.get_min_nforce() - cone_copy.get_min_nforce()) <
132 1e-9);
133
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
1 BOOST_CHECK(cone.get_max_nforce() == cone_copy.get_max_nforce());
134
135 // Checking that casted computation is the same
136
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
1 BOOST_CHECK(casted_cone.get_nf() == cone_copy.get_nf());
137
9/18
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
1 BOOST_CHECK(casted_cone.get_A().isApprox(cone_copy.get_A()));
138
3/4
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 31 times.
✓ Branch 5 taken 1 times.
32 for (std::size_t i = 0; i < static_cast<std::size_t>(cone.get_ub().size());
139 ++i) {
140
10/20
✓ Branch 1 taken 31 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 31 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 31 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 31 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 31 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 31 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 31 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 31 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 31 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 31 times.
31 BOOST_CHECK(casted_cone.get_ub()[i] == cone_copy.get_ub()[i]);
141
10/20
✓ Branch 1 taken 31 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 31 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 31 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 31 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 31 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 31 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 31 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 31 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 31 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 31 times.
31 BOOST_CHECK(casted_cone.get_lb()[i] == cone_copy.get_lb()[i]);
142 }
143
9/18
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
1 BOOST_CHECK(casted_cone.get_R().isApprox(cone_copy.get_R()));
144
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
1 BOOST_CHECK(std::abs(casted_cone.get_mu() - cone_copy.get_mu()) < 1e-9);
145
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
1 BOOST_CHECK(casted_cone.get_inner_appr() == cone_copy.get_inner_appr());
146
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
1 BOOST_CHECK(std::abs(casted_cone.get_min_nforce() -
147 cone_copy.get_min_nforce()) < 1e-9);
148
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
1 BOOST_CHECK(casted_cone.get_max_nforce() == cone_copy.get_max_nforce());
149 1 }
150 1 }
151
152 1 void test_inner_approximation_of_friction_cone() {
153
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 Eigen::Matrix3d R = Eigen::Matrix3d::Identity();
154
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 double mu = random_real_in_range(0.01, 1.);
155
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::size_t nf = 2 * random_int_in_range(2, 16);
156 1 bool inner_appr = true;
157
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 crocoddyl::FrictionCone cone(R, mu, nf, inner_appr);
158
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 crocoddyl::FrictionCone casted_cone = cone.cast<double>();
159
4/8
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
1 const Eigen::VectorXd A_mu = -cone.get_A().col(2);
160
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1 times.
33 for (std::size_t i = 0; i < nf; ++i) {
161
7/14
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 32 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 32 times.
✗ Branch 9 not taken.
✓ Branch 12 taken 32 times.
✗ Branch 13 not taken.
✓ Branch 17 taken 32 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 32 times.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 32 times.
32 BOOST_CHECK_CLOSE(
162 A_mu(i),
163 mu * cos((2 * crocoddyl::pi<double>() / static_cast<double>(nf)) / 2.),
164 1e-9);
165 }
166
167 // Checking that casted computation is the same
168
4/8
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
1 const Eigen::VectorXd A_mu_casted = -cone.get_A().col(2);
169
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1 times.
33 for (std::size_t i = 0; i < nf; ++i) {
170
7/14
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 32 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 32 times.
✗ Branch 9 not taken.
✓ Branch 12 taken 32 times.
✗ Branch 13 not taken.
✓ Branch 17 taken 32 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 32 times.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 32 times.
32 BOOST_CHECK_CLOSE(
171 A_mu_casted(i),
172 mu * cos((2 * crocoddyl::pi<double>() / static_cast<double>(nf)) / 2.),
173 1e-9);
174 }
175 1 }
176
177 1 void test_A_matrix_with_rotation_change() {
178 // Common parameters
179
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 double mu = random_real_in_range(0.01, 1.);
180
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::size_t nf = 2 * random_int_in_range(2, 16);
181 1 bool inner_appr = false;
182
183 // No rotation
184
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 Eigen::Matrix3d R = Eigen::Matrix3d::Identity();
185
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 crocoddyl::FrictionCone cone_1(R, mu, nf, inner_appr);
186
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 crocoddyl::FrictionCone casted_cone_1 = cone_1.cast<double>();
187
188 // With rotation
189
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 Eigen::Quaterniond q;
190
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 pinocchio::quaternion::uniformRandom(q);
191
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 R = q.toRotationMatrix();
192
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 crocoddyl::FrictionCone cone_2(R, mu, nf, inner_appr);
193
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 crocoddyl::FrictionCone casted_cone_2 = cone_2.cast<double>();
194
195
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 1 times.
6 for (std::size_t i = 0; i < 5; ++i) {
196
13/26
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 5 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 5 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 5 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 5 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 5 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 5 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 5 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 5 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 5 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 5 times.
✗ Branch 36 not taken.
✓ Branch 38 taken 5 times.
✗ Branch 39 not taken.
✗ Branch 43 not taken.
✓ Branch 44 taken 5 times.
5 BOOST_CHECK(
197 (cone_1.get_A().row(i) - cone_2.get_A().row(i) * R).isZero(1e-9));
198 }
199
200 // Checking that casted computation is the same
201
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 1 times.
6 for (std::size_t i = 0; i < 5; ++i) {
202
13/26
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 5 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 5 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 5 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 5 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 5 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 5 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 5 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 5 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 5 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 5 times.
✗ Branch 36 not taken.
✓ Branch 38 taken 5 times.
✗ Branch 39 not taken.
✗ Branch 43 not taken.
✓ Branch 44 taken 5 times.
5 BOOST_CHECK(
203 (casted_cone_1.get_A().row(i) - casted_cone_2.get_A().row(i) * R)
204 .isZero(1e-9));
205 }
206 1 }
207
208 1 void test_force_along_friction_cone_normal() {
209 // Create the friction cone
210
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 Eigen::Quaterniond q;
211
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 pinocchio::quaternion::uniformRandom(q);
212
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 Eigen::Matrix3d R = q.toRotationMatrix();
213
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 double mu = random_real_in_range(0.01, 1.);
214
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::size_t nf = 2 * random_int_in_range(2, 16);
215 1 bool inner_appr = false;
216
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 crocoddyl::FrictionCone cone(R, mu, nf, inner_appr);
217
218 // Create the activation for quadratic barrier
219
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
1 crocoddyl::ActivationBounds bounds(cone.get_lb(), cone.get_ub());
220
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 crocoddyl::ActivationModelQuadraticBarrier activation(bounds);
221 crocoddyl::ActivationModelQuadraticBarrier casted_activation =
222
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 activation.cast<double>();
223 const std::shared_ptr<crocoddyl::ActivationDataAbstract>& data =
224
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 activation.createData();
225 const std::shared_ptr<crocoddyl::ActivationDataAbstract>& casted_data =
226
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 casted_activation.createData();
227
228 // Compute the activation value
229
4/8
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
1 Eigen::Vector3d force = random_real_in_range(0., 100.) * R.col(2);
230
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
1 Eigen::VectorXd r = cone.get_A() * force;
231
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 activation.calc(data, r);
232
233 // The activation value has to be zero since the force is inside the friction
234 // cone
235
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
1 BOOST_CHECK(data->a_value == 0.);
236
237 // Checking that casted computation is the same
238
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 casted_activation.calc(casted_data, r);
239
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
1 BOOST_CHECK(casted_data->a_value == 0.);
240 1 }
241
242 1 void test_negative_force_along_friction_cone_normal() {
243 // Create the friction cone
244
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 Eigen::Quaterniond q;
245
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 pinocchio::quaternion::uniformRandom(q);
246
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 Eigen::Matrix3d R = q.toRotationMatrix();
247
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 double mu = random_real_in_range(0.01, 1.);
248
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::size_t nf = 2 * random_int_in_range(2, 16);
249 1 bool inner_appr = false;
250
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 crocoddyl::FrictionCone cone(R, mu, nf, inner_appr);
251
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 crocoddyl::FrictionCone casted_cone = cone.cast<double>();
252
253 // Create the activation for quadratic barrier
254
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
1 crocoddyl::ActivationBounds bounds(cone.get_lb(), cone.get_ub());
255
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 crocoddyl::ActivationModelQuadraticBarrier activation(bounds);
256 crocoddyl::ActivationModelQuadraticBarrier casted_activation =
257
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 activation.cast<double>();
258 const std::shared_ptr<crocoddyl::ActivationDataAbstract>& data =
259
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 activation.createData();
260 const std::shared_ptr<crocoddyl::ActivationDataAbstract>& casted_data =
261
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 casted_activation.createData();
262
263 // Compute the activation value
264
4/8
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
1 Eigen::Vector3d force = -random_real_in_range(0., 100.) * R.col(2);
265
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
1 Eigen::VectorXd r = cone.get_A() * force;
266
267 // The first nf elements of the residual has to be positive since the force is
268 // outside the friction cone. Additionally, the last value has to be equals to
269 // the force norm but with negative value since the forces is aligned and in
270 // opposite direction to the friction cone orientation
271
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1 times.
33 for (std::size_t i = 0; i < nf; ++i) {
272
7/14
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 32 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 32 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 32 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 32 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 32 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 32 times.
32 BOOST_CHECK(r(i) > 0.);
273 }
274
8/16
✓ 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 22 taken 1 times.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
1 BOOST_CHECK_CLOSE(r(nf), -force.norm(), 1e-9);
275
276 // The activation value has to be positive since the force is outside the
277 // friction cone
278
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 activation.calc(data, r);
279
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
1 BOOST_CHECK(data->a_value > 0.);
280
281 // Checking that casted computation is the same
282
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
1 r = casted_cone.get_A() * force;
283
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1 times.
33 for (std::size_t i = 0; i < nf; ++i) {
284
7/14
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 32 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 32 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 32 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 32 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 32 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 32 times.
32 BOOST_CHECK(r(i) > 0.);
285 }
286
8/16
✓ 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 22 taken 1 times.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
1 BOOST_CHECK_CLOSE(r(nf), -force.norm(), 1e-9);
287
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 casted_activation.calc(casted_data, r);
288
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
1 BOOST_CHECK(casted_data->a_value > 0.);
289 1 }
290
291 1 void test_force_parallel_to_friction_cone_normal() {
292 // Create the friction cone
293
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 Eigen::Matrix3d R = Eigen::Matrix3d::Identity();
294
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 double mu = random_real_in_range(0.01, 1.);
295
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::size_t nf = 2 * random_int_in_range(2, 16);
296 1 bool inner_appr = false;
297
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 crocoddyl::FrictionCone cone(R, mu, nf, inner_appr);
298
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 crocoddyl::FrictionCone casted_cone = cone.cast<double>();
299
300 // Create the activation for quadratic barrier
301
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
1 crocoddyl::ActivationBounds bounds(cone.get_lb(), cone.get_ub());
302
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 crocoddyl::ActivationModelQuadraticBarrier activation(bounds);
303 crocoddyl::ActivationModelQuadraticBarrier casted_activation =
304
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 activation.cast<double>();
305 const std::shared_ptr<crocoddyl::ActivationDataAbstract>& data =
306
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 activation.createData();
307 const std::shared_ptr<crocoddyl::ActivationDataAbstract>& casted_data =
308
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 casted_activation.createData();
309
310 // Compute the activation value
311 Eigen::Vector3d force =
312
4/8
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
1 -random_real_in_range(0., 100.) * Eigen::Vector3d::UnitX();
313
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
1 Eigen::VectorXd r = cone.get_A() * force;
314
315 // The last value of the residual is equals to zero since the force is
316 // parallel to the friction cone orientation
317
7/14
✓ 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 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
1 BOOST_CHECK_CLOSE(r(nf), 0., 1e-9);
318
319 // The activation value has to be positive since the force is outside the
320 // friction cone
321
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 activation.calc(data, r);
322
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
1 BOOST_CHECK(data->a_value > 0.);
323
324 // Checking that casted computation is the same
325
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
1 r = casted_cone.get_A() * force;
326
7/14
✓ 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 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
1 BOOST_CHECK_CLOSE(r(nf), 0., 1e-9);
327
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 casted_activation.calc(casted_data, r);
328
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
1 BOOST_CHECK(casted_data->a_value > 0.);
329 1 }
330
331 1 void register_unit_tests() {
332 1 framework::master_test_suite().add(
333
4/8
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
1 BOOST_TEST_CASE(boost::bind(&test_constructor)));
334 1 framework::master_test_suite().add(
335
4/8
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
1 BOOST_TEST_CASE(boost::bind(&test_inner_approximation_of_friction_cone)));
336 1 framework::master_test_suite().add(
337
4/8
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
1 BOOST_TEST_CASE(boost::bind(&test_A_matrix_with_rotation_change)));
338 1 framework::master_test_suite().add(
339
4/8
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
1 BOOST_TEST_CASE(boost::bind(&test_force_along_friction_cone_normal)));
340
4/8
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
1 framework::master_test_suite().add(BOOST_TEST_CASE(
341 boost::bind(&test_negative_force_along_friction_cone_normal)));
342
4/8
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
1 framework::master_test_suite().add(BOOST_TEST_CASE(
343 boost::bind(&test_force_parallel_to_friction_cone_normal)));
344 1 }
345
346 1 bool init_function() {
347 1 register_unit_tests();
348 1 return true;
349 }
350
351 1 int main(int argc, char* argv[]) {
352 1 return ::boost::unit_test::unit_test_main(&init_function, argc, argv);
353 }
354