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 |