GCC Code Coverage Report


Directory: ./
File: unittest/test_controls.cpp
Date: 2025-03-26 19:23:43
Exec Total Coverage
Lines: 102 102 100.0%
Branches: 216 430 50.2%

Line Branch Exec Source
1 ///////////////////////////////////////////////////////////////////////////////
2 // BSD 3-Clause License
3 //
4 // Copyright (C) 2021-2025, LAAS-CNRS, New York University,
5 // Max Planck Gesellschaft,
6 // University of Edinburgh, INRIA,
7 // University of Trento, Heriot-Watt University
8 // Copyright note valid unless otherwise controld 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 "crocoddyl/core/numdiff/control.hpp"
16 #include "factory/control.hpp"
17 #include "unittest_common.hpp"
18
19 using namespace boost::unit_test;
20 using namespace crocoddyl::unittest;
21
22 //----------------------------------------------------------------------------//
23
24 4 void test_calcDiff_num_diff(ControlTypes::Type control_type) {
25
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
4 ControlFactory factory;
26 const std::shared_ptr<crocoddyl::ControlParametrizationModelAbstract>&
27
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
4 control = factory.create(control_type, 10);
28
29 const std::shared_ptr<crocoddyl::ControlParametrizationDataAbstract>& data =
30
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 control->createData();
31
32 // Generating random values for the control parameters
33
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
4 const Eigen::VectorXd p = Eigen::VectorXd::Random(control->get_nu());
34
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 double t = Eigen::VectorXd::Random(1)(0) * 0.5 + 1.; // random in [0, 1]
35
36 // Get the num diff control
37
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 crocoddyl::ControlParametrizationModelNumDiff control_num_diff(control);
38 std::shared_ptr<crocoddyl::ControlParametrizationDataAbstract> data_num_diff =
39
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
4 control_num_diff.createData();
40
41 // Computing the partial derivatives of the value function
42
2/4
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
4 control->calc(data, t, p);
43
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 control_num_diff.calc(data_num_diff, t, p);
44
2/4
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
4 control->calcDiff(data, t, p);
45
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 control_num_diff.calcDiff(data_num_diff, t, p);
46 // Tolerance defined as in
47 // http://www.it.uom.gr/teaching/linearalgebra/NumericalRecipiesInC/c5-7.pdf
48 4 double tol = std::pow(control_num_diff.get_disturbance(), 1. / 3.);
49
8/16
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 4 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 4 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 4 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 4 times.
4 BOOST_CHECK((data->dw_du - data_num_diff->dw_du).isZero(tol));
50
51 // Checking that casted computation is the same
52 const std::shared_ptr<
53 crocoddyl::ControlParametrizationModelAbstractTpl<float>>&
54
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 casted_control = control->cast<float>();
55 const std::shared_ptr<
56 crocoddyl::ControlParametrizationDataAbstractTpl<float>>& casted_data =
57
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 casted_control->createData();
58
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 const Eigen::VectorXf p_f = p.cast<float>();
59 4 float t_f = float(t);
60
2/4
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
4 casted_control->calc(casted_data, t_f, p_f);
61
2/4
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
4 casted_control->calcDiff(casted_data, t_f, p_f);
62 4 float tol_f = std::sqrt(2.0f * std::numeric_limits<float>::epsilon());
63
9/18
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 4 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 4 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 4 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 4 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 4 times.
4 BOOST_CHECK((data->dw_du.cast<float>() - casted_data->dw_du).isZero(tol_f));
64 4 }
65
66 4 void test_multiplyByJacobian_num_diff(ControlTypes::Type control_type) {
67
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
4 ControlFactory factory;
68 const std::shared_ptr<crocoddyl::ControlParametrizationModelAbstract>&
69
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
4 control = factory.create(control_type, 10);
70
71 std::shared_ptr<crocoddyl::ControlParametrizationDataAbstract> data =
72
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 control->createData();
73
74 // Generating random values for the control parameters, the time, and the
75 // matrix to multiply
76
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
4 const Eigen::VectorXd p = Eigen::VectorXd::Random(control->get_nu());
77
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 double t = Eigen::VectorXd::Random(1)(0) * 0.5 + 1.; // random in [0, 1]
78
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
4 const Eigen::MatrixXd A = Eigen::MatrixXd::Random(5, control->get_nw());
79
80 // Get the num diff control and datas
81
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 crocoddyl::ControlParametrizationModelNumDiff control_num_diff(control);
82 std::shared_ptr<crocoddyl::ControlParametrizationDataAbstract> data_num_diff =
83
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
4 control_num_diff.createData();
84
85 // Checking the operator
86
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
4 Eigen::MatrixXd A_J(Eigen::MatrixXd::Zero(A.rows(), control->get_nu()));
87 Eigen::MatrixXd A_J_num_diff(
88
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
4 Eigen::MatrixXd::Zero(A.rows(), control->get_nu()));
89
2/4
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
4 control->calc(data, t, p);
90
2/4
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
4 control->calcDiff(data, t, p);
91
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 control_num_diff.calc(data_num_diff, t, p);
92
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 control_num_diff.calcDiff(data_num_diff, t, p);
93
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
4 control->multiplyByJacobian(data, A, A_J);
94
3/6
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
4 control_num_diff.multiplyByJacobian(data_num_diff, A, A_J_num_diff);
95 // Tolerance defined as in
96 // http://www.it.uom.gr/teaching/linearalgebra/NumericalRecipiesInC/c5-7.pdf
97 4 double tol = std::pow(control_num_diff.get_disturbance(), 1. / 3.);
98
8/16
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 4 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 4 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 4 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 4 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 4 times.
4 BOOST_CHECK((A_J - A_J_num_diff).isZero(tol));
99
100 // Checking that casted computation is the same
101 const std::shared_ptr<
102 crocoddyl::ControlParametrizationModelAbstractTpl<float>>&
103
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 casted_control = control->cast<float>();
104 const std::shared_ptr<
105 crocoddyl::ControlParametrizationDataAbstractTpl<float>>& casted_data =
106
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 casted_control->createData();
107 Eigen::MatrixXf A_J_f(
108
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
4 Eigen::MatrixXf::Zero(A.rows(), casted_control->get_nu()));
109
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 const Eigen::VectorXf p_f = p.cast<float>();
110 4 float t_f = float(t);
111
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 const Eigen::MatrixXf A_f = A.cast<float>();
112
2/4
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
4 casted_control->calc(casted_data, t_f, p_f);
113
2/4
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
4 casted_control->calcDiff(casted_data, t_f, p_f);
114
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
4 casted_control->multiplyByJacobian(casted_data, A_f, A_J_f);
115 4 float tol_f = std::sqrt(2.0f * std::numeric_limits<float>::epsilon());
116
9/18
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 4 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 4 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 4 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 4 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 4 times.
4 BOOST_CHECK((data->dw_du.cast<float>() - casted_data->dw_du).isZero(tol_f));
117
9/18
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 4 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 4 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 4 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 4 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 4 times.
✗ Branch 27 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 4 times.
4 BOOST_CHECK((A_J.cast<float>() - A_J_f).isZero(tol_f));
118 4 }
119
120 4 void test_multiplyJacobianTransposeBy_num_diff(
121 ControlTypes::Type control_type) {
122
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
4 ControlFactory factory;
123 const std::shared_ptr<crocoddyl::ControlParametrizationModelAbstract>&
124
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
4 control = factory.create(control_type, 10);
125
126 std::shared_ptr<crocoddyl::ControlParametrizationDataAbstract> data =
127
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 control->createData();
128
129 // Generating random values for the control parameters, the time, and the
130 // matrix to multiply
131
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
4 const Eigen::VectorXd p = Eigen::VectorXd::Random(control->get_nu());
132
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 double t = Eigen::VectorXd::Random(1)(0) * 0.5 + 1.; // random in [0, 1]
133
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
4 const Eigen::MatrixXd A = Eigen::MatrixXd::Random(control->get_nw(), 5);
134
135 // Get the num diff control and datas
136
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 crocoddyl::ControlParametrizationModelNumDiff control_num_diff(control);
137 std::shared_ptr<crocoddyl::ControlParametrizationDataAbstract> data_num_diff =
138
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
4 control_num_diff.createData();
139
140 // Checking the operator
141
3/6
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
4 Eigen::MatrixXd JT_A(Eigen::MatrixXd::Zero(control->get_nu(), A.cols()));
142 Eigen::MatrixXd JT_A_num_diff(
143
3/6
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
4 Eigen::MatrixXd::Zero(control->get_nu(), A.cols()));
144
2/4
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
4 control->calc(data, t, p);
145
2/4
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
4 control->calcDiff(data, t, p);
146
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 control_num_diff.calc(data_num_diff, t, p);
147
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 control_num_diff.calcDiff(data_num_diff, t, p);
148
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
4 control->multiplyJacobianTransposeBy(data, A, JT_A);
149
3/6
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
4 control_num_diff.multiplyJacobianTransposeBy(data_num_diff, A, JT_A_num_diff);
150 // Tolerance defined as in
151 // http://www.it.uom.gr/teaching/linearalgebra/NumericalRecipiesInC/c5-7.pdf
152 4 double tol = std::pow(control_num_diff.get_disturbance(), 1. / 3.);
153
8/16
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 4 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 4 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 4 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 4 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 4 times.
4 BOOST_CHECK((JT_A - JT_A_num_diff).isZero(tol));
154
155 // Checking that casted computation is the same
156 const std::shared_ptr<
157 crocoddyl::ControlParametrizationModelAbstractTpl<float>>&
158
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 casted_control = control->cast<float>();
159 const std::shared_ptr<
160 crocoddyl::ControlParametrizationDataAbstractTpl<float>>& casted_data =
161
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 casted_control->createData();
162
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 const Eigen::VectorXf p_f = p.cast<float>();
163 4 float t_f = float(t);
164
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 const Eigen::MatrixXf A_f = A.cast<float>();
165 Eigen::MatrixXf JT_A_f(
166
3/6
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
4 Eigen::MatrixXf::Zero(casted_control->get_nu(), A_f.cols()));
167
2/4
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
4 casted_control->calc(casted_data, t_f, p_f);
168
2/4
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
4 casted_control->calcDiff(casted_data, t_f, p_f);
169
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
4 casted_control->multiplyJacobianTransposeBy(casted_data, A_f, JT_A_f);
170 4 float tol_f = std::sqrt(2.0f * std::numeric_limits<float>::epsilon());
171
9/18
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 4 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 4 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 4 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 4 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 4 times.
✗ Branch 27 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 4 times.
4 BOOST_CHECK((JT_A.cast<float>() - JT_A_f).isZero(tol_f));
172 4 }
173
174 //----------------------------------------------------------------------------//
175
176 4 void register_control_unit_tests(ControlTypes::Type control_type) {
177
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 boost::test_tools::output_test_stream test_name;
178
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 test_name << "test_" << control_type;
179
4/8
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
4 std::cout << "Running " << test_name.str() << std::endl;
180
4/8
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
4 test_suite* ts = BOOST_TEST_SUITE(test_name.str());
181
5/10
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 4 times.
✗ Branch 15 not taken.
4 ts->add(BOOST_TEST_CASE(boost::bind(&test_calcDiff_num_diff, control_type)));
182
5/10
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 4 times.
✗ Branch 15 not taken.
4 ts->add(BOOST_TEST_CASE(
183 boost::bind(&test_multiplyByJacobian_num_diff, control_type)));
184
5/10
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 4 times.
✗ Branch 15 not taken.
4 ts->add(BOOST_TEST_CASE(
185 boost::bind(&test_multiplyJacobianTransposeBy_num_diff, control_type)));
186
3/6
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
4 framework::master_test_suite().add(ts);
187 4 }
188
189 1 bool init_function() {
190
2/2
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
5 for (size_t i = 0; i < ControlTypes::all.size(); ++i) {
191 4 register_control_unit_tests(ControlTypes::all[i]);
192 }
193 1 return true;
194 }
195
196 1 int main(int argc, char** argv) {
197 1 return ::boost::unit_test::unit_test_main(&init_function, argc, argv);
198 }
199