GCC Code Coverage Report


Directory: ./
File: unittest/test_impulses.cpp
Date: 2025-02-24 23:41:29
Exec Total Coverage
Lines: 89 89 100.0%
Branches: 222 434 51.2%

Line Branch Exec Source
1 ///////////////////////////////////////////////////////////////////////////////
2 // BSD 3-Clause License
3 //
4 // Copyright (C) 2019-2022, LAAS-CNRS, New York University, Max Planck
5 // Gesellschaft,
6 // INRIA, University of Edinburgh, Heriot-Watt
7 // University
8 // Copyright note valid unless otherwise stated in individual files.
9 // All rights reserved.
10 ///////////////////////////////////////////////////////////////////////////////
11
12 #define BOOST_TEST_NO_MAIN
13 #define BOOST_TEST_ALTERNATIVE_INIT_API
14
15 #include <boost/make_shared.hpp>
16 #include <memory>
17 #include <pinocchio/algorithm/frames.hpp>
18 #include <pinocchio/algorithm/kinematics-derivatives.hpp>
19
20 #include "crocoddyl/multibody/impulses/impulse-3d.hpp"
21 #include "crocoddyl/multibody/impulses/impulse-6d.hpp"
22 #include "factory/impulse.hpp"
23 #include "unittest_common.hpp"
24
25 using namespace boost::unit_test;
26 using namespace crocoddyl::unittest;
27
28 //----------------------------------------------------------------------------//
29
30 30 void test_construct_data(ImpulseModelTypes::Type impulse_type,
31 PinocchioModelTypes::Type model_type) {
32 // create the model
33
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 ImpulseModelFactory factory;
34 std::shared_ptr<crocoddyl::ImpulseModelAbstract> model =
35
2/4
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
60 factory.create(impulse_type, model_type);
36
37 // Run the print function
38
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 std::ostringstream tmp;
39
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 tmp << *model;
40
41 // create the corresponding data object
42
1/2
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
30 pinocchio::Data pinocchio_data(*model->get_state()->get_pinocchio().get());
43 std::shared_ptr<crocoddyl::ImpulseDataAbstract> data =
44
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 model->createData(&pinocchio_data);
45 30 }
46
47 30 void test_calc_fetch_jacobians(ImpulseModelTypes::Type impulse_type,
48 PinocchioModelTypes::Type model_type) {
49 // create the model
50
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 ImpulseModelFactory factory;
51 std::shared_ptr<crocoddyl::ImpulseModelAbstract> model =
52
2/4
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
60 factory.create(impulse_type, model_type);
53
54 // create the corresponding data object
55 const std::shared_ptr<pinocchio::Model>& pinocchio_model =
56 30 model->get_state()->get_pinocchio();
57
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 pinocchio::Data pinocchio_data(*pinocchio_model.get());
58 std::shared_ptr<crocoddyl::ImpulseDataAbstract> data =
59
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 model->createData(&pinocchio_data);
60
61 // Compute the jacobian and check that the impulse model fetch it.
62
1/2
✓ Branch 4 taken 30 times.
✗ Branch 5 not taken.
30 Eigen::VectorXd x = model->get_state()->rand();
63
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 crocoddyl::unittest::updateAllPinocchio(pinocchio_model.get(),
64 &pinocchio_data, x);
65
66 // Getting the jacobian from the model
67
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 Eigen::VectorXd dx;
68
2/4
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 model->calc(data, dx);
69
70 // Check that only the Jacobian has been filled
71
7/14
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 30 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 30 times.
30 BOOST_CHECK(!data->Jc.isZero());
72
7/14
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 30 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 30 times.
30 BOOST_CHECK(data->dv0_dq.isZero());
73
8/16
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 30 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 30 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 30 times.
30 BOOST_CHECK(data->f.toVector().isZero());
74
7/14
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 30 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 30 times.
30 BOOST_CHECK(data->df_dx.isZero());
75 30 }
76
77 30 void test_calc_diff_fetch_derivatives(ImpulseModelTypes::Type impulse_type,
78 PinocchioModelTypes::Type model_type) {
79 // create the model
80
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 ImpulseModelFactory factory;
81 std::shared_ptr<crocoddyl::ImpulseModelAbstract> model =
82
2/4
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
60 factory.create(impulse_type, model_type);
83
84 // create the corresponding data object
85 const std::shared_ptr<pinocchio::Model>& pinocchio_model =
86 30 model->get_state()->get_pinocchio();
87
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 pinocchio::Data pinocchio_data(*pinocchio_model.get());
88 std::shared_ptr<crocoddyl::ImpulseDataAbstract> data =
89
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 model->createData(&pinocchio_data);
90
91 // Compute the jacobian and check that the impulse model fetch it.
92
1/2
✓ Branch 4 taken 30 times.
✗ Branch 5 not taken.
30 Eigen::VectorXd x = model->get_state()->rand();
93
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 crocoddyl::unittest::updateAllPinocchio(pinocchio_model.get(),
94 &pinocchio_data, x);
95
96 // Getting the jacobian from the model
97
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 Eigen::VectorXd dx;
98
2/4
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 model->calc(data, dx);
99
2/4
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 model->calcDiff(data, dx);
100
101 // Check that nothing has been computed and that all value are initialized to
102 // 0
103
7/14
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 30 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 30 times.
30 BOOST_CHECK(!data->Jc.isZero());
104
4/4
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 24 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 1 times.
30 if (model_type == PinocchioModelTypes::Hector &&
105
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
5 (impulse_type == ImpulseModelTypes::ImpulseModel3D_LOCAL ||
106 impulse_type ==
107 ImpulseModelTypes::ImpulseModel6D_LOCAL)) { // this is due to Hector
108 // is a single rigid
109 // body system.
110
7/14
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 2 times.
2 BOOST_CHECK(data->dv0_dq.isZero());
111 } else {
112
7/14
✓ Branch 1 taken 28 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 28 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 28 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 28 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 28 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 28 times.
28 BOOST_CHECK(!data->dv0_dq.isZero());
113 }
114
8/16
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 30 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 30 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 30 times.
30 BOOST_CHECK(data->f.toVector().isZero());
115
7/14
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 30 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 30 times.
30 BOOST_CHECK(data->df_dx.isZero());
116 30 }
117
118 30 void test_update_force(ImpulseModelTypes::Type impulse_type,
119 PinocchioModelTypes::Type model_type) {
120 // create the model
121
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 ImpulseModelFactory factory;
122 std::shared_ptr<crocoddyl::ImpulseModelAbstract> model =
123
2/4
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
60 factory.create(impulse_type, model_type);
124
125 // create the corresponding data object
126 const std::shared_ptr<pinocchio::Model>& pinocchio_model =
127 30 model->get_state()->get_pinocchio();
128
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 pinocchio::Data pinocchio_data(*pinocchio_model.get());
129 std::shared_ptr<crocoddyl::ImpulseDataAbstract> data =
130
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 model->createData(&pinocchio_data);
131
132 // Create a random force and update it
133
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
30 Eigen::VectorXd f = Eigen::VectorXd::Random(data->Jc.rows());
134
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 model->updateForce(data, f);
135 std::shared_ptr<crocoddyl::ImpulseModel3D> m =
136 30 std::static_pointer_cast<crocoddyl::ImpulseModel3D>(model);
137
138 // Check that nothing has been computed and that all value are initialized to
139 // 0
140
7/14
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 30 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 30 times.
30 BOOST_CHECK(data->Jc.isZero());
141
7/14
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 30 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 30 times.
30 BOOST_CHECK(data->dv0_dq.isZero());
142
8/16
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 30 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 30 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 30 times.
30 BOOST_CHECK(!data->f.toVector().isZero());
143
7/14
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 30 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 30 times.
30 BOOST_CHECK(data->df_dx.isZero());
144 30 }
145
146 30 void test_update_force_diff(ImpulseModelTypes::Type impulse_type,
147 PinocchioModelTypes::Type model_type) {
148 // create the model
149
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 ImpulseModelFactory factory;
150 std::shared_ptr<crocoddyl::ImpulseModelAbstract> model =
151
2/4
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
60 factory.create(impulse_type, model_type);
152
153 // create the corresponding data object
154 const std::shared_ptr<pinocchio::Model>& pinocchio_model =
155 30 model->get_state()->get_pinocchio();
156
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 pinocchio::Data pinocchio_data(*pinocchio_model.get());
157 std::shared_ptr<crocoddyl::ImpulseDataAbstract> data =
158
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 model->createData(&pinocchio_data);
159
160 // Create a random force and update it
161 Eigen::MatrixXd df_dx =
162
2/4
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 30 times.
✗ Branch 9 not taken.
30 Eigen::MatrixXd::Random(data->df_dx.rows(), data->df_dx.cols());
163
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 model->updateForceDiff(data, df_dx);
164
165 // Check that nothing has been computed and that all value are initialized to
166 // 0
167
7/14
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 30 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 30 times.
30 BOOST_CHECK(data->Jc.isZero());
168
7/14
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 30 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 30 times.
30 BOOST_CHECK(data->dv0_dq.isZero());
169
8/16
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 30 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 30 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 30 times.
30 BOOST_CHECK(data->f.toVector().isZero());
170
7/14
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 30 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 30 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 30 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 30 times.
30 BOOST_CHECK(!data->df_dx.isZero());
171 30 }
172
173 //----------------------------------------------------------------------------//
174
175 30 void register_impulse_model_unit_tests(ImpulseModelTypes::Type impulse_type,
176 PinocchioModelTypes::Type model_type) {
177
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 30 times.
✗ Branch 5 not taken.
30 boost::test_tools::output_test_stream test_name;
178
4/8
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 30 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 30 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 30 times.
✗ Branch 11 not taken.
30 test_name << "test_" << impulse_type << "_" << model_type;
179
4/8
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 30 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 30 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 30 times.
✗ Branch 11 not taken.
30 std::cout << "Running " << test_name.str() << std::endl;
180
4/8
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 30 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
30 test_suite* ts = BOOST_TEST_SUITE(test_name.str());
181
5/10
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 30 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 30 times.
✗ Branch 15 not taken.
30 ts->add(BOOST_TEST_CASE(
182 boost::bind(&test_construct_data, impulse_type, model_type)));
183
5/10
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 30 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 30 times.
✗ Branch 15 not taken.
30 ts->add(BOOST_TEST_CASE(
184 boost::bind(&test_calc_fetch_jacobians, impulse_type, model_type)));
185
5/10
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 30 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 30 times.
✗ Branch 15 not taken.
30 ts->add(BOOST_TEST_CASE(boost::bind(&test_calc_diff_fetch_derivatives,
186 impulse_type, model_type)));
187
5/10
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 30 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 30 times.
✗ Branch 15 not taken.
30 ts->add(BOOST_TEST_CASE(
188 boost::bind(&test_update_force, impulse_type, model_type)));
189
5/10
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 30 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 30 times.
✗ Branch 15 not taken.
30 ts->add(BOOST_TEST_CASE(
190 boost::bind(&test_update_force_diff, impulse_type, model_type)));
191
3/6
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
30 framework::master_test_suite().add(ts);
192 30 }
193
194 1 bool init_function() {
195
2/2
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 1 times.
7 for (size_t impulse_type = 0; impulse_type < ImpulseModelTypes::all.size();
196 ++impulse_type) {
197
2/2
✓ Branch 1 taken 30 times.
✓ Branch 2 taken 6 times.
36 for (size_t model_type = 0; model_type < PinocchioModelTypes::all.size();
198 ++model_type) {
199 30 register_impulse_model_unit_tests(ImpulseModelTypes::all[impulse_type],
200 30 PinocchioModelTypes::all[model_type]);
201 }
202 }
203 1 return true;
204 }
205
206 1 int main(int argc, char** argv) {
207 1 return ::boost::unit_test::unit_test_main(&init_function, argc, argv);
208 }
209