Directory: | ./ |
---|---|
File: | unittest/test_actions.cpp |
Date: | 2025-03-26 19:23:43 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 179 | 183 | 97.8% |
Branches: | 372 | 802 | 46.4% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | /////////////////////////////////////////////////////////////////////////////// | ||
2 | // BSD 3-Clause License | ||
3 | // | ||
4 | // Copyright (C) 2019-2025, LAAS-CNRS, New York University, | ||
5 | // Max Planck Gesellschaft, University of Edinburgh, | ||
6 | // INRIA, Heriot-Watt University | ||
7 | // Copyright note valid unless otherwise stated in individual files. | ||
8 | // All rights reserved. | ||
9 | /////////////////////////////////////////////////////////////////////////////// | ||
10 | |||
11 | #define BOOST_TEST_NO_MAIN | ||
12 | #define BOOST_TEST_ALTERNATIVE_INIT_API | ||
13 | |||
14 | #include "factory/action.hpp" | ||
15 | #include "factory/control.hpp" | ||
16 | #include "factory/diff_action.hpp" | ||
17 | #include "factory/integrator.hpp" | ||
18 | #include "unittest_common.hpp" | ||
19 | |||
20 | using namespace boost::unit_test; | ||
21 | using namespace crocoddyl::unittest; | ||
22 | |||
23 | //----------------------------------------------------------------------------// | ||
24 | |||
25 | 214 | void test_check_data( | |
26 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model) { | ||
27 | // Run the print function | ||
28 |
1/2✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
|
214 | std::ostringstream tmp; |
29 |
1/2✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
|
214 | tmp << *model; |
30 | |||
31 | // create the corresponding data object | ||
32 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
33 |
1/2✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
|
214 | model->createData(); |
34 |
7/14✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 214 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 214 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 214 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 214 times.
|
214 | BOOST_CHECK(model->checkData(data)); |
35 | |||
36 | // Checking that casted computation is the same | ||
37 | #ifdef NDEBUG // Run only in release mode | ||
38 | std::shared_ptr<crocoddyl::ActionModelAbstractTpl<float>> casted_model = | ||
39 | model->cast<float>(); | ||
40 | std::shared_ptr<crocoddyl::ActionDataAbstractTpl<float>> casted_data = | ||
41 | casted_model->createData(); | ||
42 | BOOST_CHECK(casted_model->checkData(casted_data)); | ||
43 | #endif | ||
44 | 214 | } | |
45 | |||
46 | 214 | void test_calc(const std::shared_ptr<crocoddyl::ActionModelAbstract>& model) { | |
47 | // create the corresponding data object | ||
48 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
49 |
1/2✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
|
214 | model->createData(); |
50 | 214 | data->cost = nan(""); | |
51 | |||
52 | // Generating random state and control vectors | ||
53 |
2/4✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 214 times.
✗ Branch 7 not taken.
|
214 | const Eigen::VectorXd x = model->get_state()->rand(); |
54 |
3/6✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 214 times.
✗ Branch 9 not taken.
|
214 | const Eigen::VectorXd u = Eigen::VectorXd::Random(model->get_nu()); |
55 | |||
56 | // Getting the state dimension from calc() call | ||
57 |
3/6✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 214 times.
✗ Branch 9 not taken.
|
214 | model->calc(data, x, u); |
58 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 17 taken 214 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 214 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 214 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 214 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 214 times.
|
214 | BOOST_CHECK(static_cast<std::size_t>(data->xnext.size()) == |
59 | model->get_state()->get_nx()); | ||
60 | |||
61 | // Checking that calc returns a cost value | ||
62 |
6/12✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 214 times.
|
214 | BOOST_CHECK(!std::isnan(data->cost)); |
63 | |||
64 | // Checking the termninal state | ||
65 | 214 | double tol = std::sqrt(2.0 * std::numeric_limits<double>::epsilon()); | |
66 |
2/4✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
|
214 | model->calc(data, x); |
67 |
11/22✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 214 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 214 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 214 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 214 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 214 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 214 times.
✗ Branch 36 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 214 times.
|
214 | BOOST_CHECK((data->xnext - x).head(model->get_state()->get_nq()).isZero(tol)); |
68 | |||
69 | // Checking that casted computation is the same | ||
70 | #ifdef NDEBUG // Run only in release mode | ||
71 | std::shared_ptr<crocoddyl::ActionModelAbstractTpl<float>> casted_model = | ||
72 | model->cast<float>(); | ||
73 | std::shared_ptr<crocoddyl::ActionDataAbstractTpl<float>> casted_data = | ||
74 | casted_model->createData(); | ||
75 | const Eigen::VectorXf x_f = x.cast<float>(); | ||
76 | const Eigen::VectorXf u_f = u.cast<float>(); | ||
77 | model->calc(data, x, u); | ||
78 | casted_model->calc(casted_data, x_f, u_f); | ||
79 | BOOST_CHECK(static_cast<std::size_t>(casted_data->xnext.size()) == | ||
80 | casted_model->get_state()->get_nx()); | ||
81 | float tol_f = 10.f * std::sqrt(2.0f * std::numeric_limits<float>::epsilon()); | ||
82 | BOOST_CHECK(std::abs(float(data->cost) - casted_data->cost) <= tol_f); | ||
83 | #endif | ||
84 | 214 | } | |
85 | |||
86 | 214 | void test_partial_derivatives_against_numdiff( | |
87 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model) { | ||
88 | // create the corresponding data object and set the cost to nan | ||
89 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
90 |
1/2✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
|
214 | model->createData(); |
91 | |||
92 |
1/2✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
|
214 | crocoddyl::ActionModelNumDiff model_num_diff(model); |
93 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data_num_diff = | ||
94 |
1/2✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
|
214 | model_num_diff.createData(); |
95 | |||
96 | // Generating random values for the state and control | ||
97 |
2/4✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 214 times.
✗ Branch 7 not taken.
|
214 | Eigen::VectorXd x = model->get_state()->rand(); |
98 |
3/6✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 214 times.
✗ Branch 9 not taken.
|
214 | const Eigen::VectorXd u = Eigen::VectorXd::Random(model->get_nu()); |
99 | |||
100 | // Computing the action derivatives | ||
101 |
3/6✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 214 times.
✗ Branch 9 not taken.
|
214 | model->calc(data, x, u); |
102 |
3/6✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 214 times.
✗ Branch 9 not taken.
|
214 | model->calcDiff(data, x, u); |
103 |
3/6✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 214 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 214 times.
✗ Branch 8 not taken.
|
214 | model_num_diff.calc(data_num_diff, x, u); |
104 |
3/6✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 214 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 214 times.
✗ Branch 8 not taken.
|
214 | model_num_diff.calcDiff(data_num_diff, x, u); |
105 | // Tolerance defined as in | ||
106 | // http://www.it.uom.gr/teaching/linearalgebra/NumericalRecipiesInC/c5-7.pdf | ||
107 |
1/2✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
|
214 | double tol = std::pow(model_num_diff.get_disturbance(), 1. / 3.); |
108 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->h - data_num_diff->h).isZero(tol)); |
109 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->g - data_num_diff->g).isZero(tol)); |
110 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->Fx - data_num_diff->Fx).isZero(tol)); |
111 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->Fu - data_num_diff->Fu).isZero(tol)); |
112 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->Lx - data_num_diff->Lx).isZero(tol)); |
113 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->Lu - data_num_diff->Lu).isZero(tol)); |
114 |
2/4✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 214 times.
|
214 | if (model_num_diff.get_with_gauss_approx()) { |
115 | ✗ | BOOST_CHECK((data->Lxx - data_num_diff->Lxx).isZero(tol)); | |
116 | ✗ | BOOST_CHECK((data->Lxu - data_num_diff->Lxu).isZero(tol)); | |
117 | ✗ | BOOST_CHECK((data->Luu - data_num_diff->Luu).isZero(tol)); | |
118 | } | ||
119 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->Hx - data_num_diff->Hx).isZero(tol)); |
120 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->Hu - data_num_diff->Hu).isZero(tol)); |
121 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->Gx - data_num_diff->Gx).isZero(tol)); |
122 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->Gu - data_num_diff->Gu).isZero(tol)); |
123 | |||
124 | // Computing the action derivatives | ||
125 |
2/4✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 214 times.
✗ Branch 7 not taken.
|
214 | x = model->get_state()->rand(); |
126 |
2/4✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
|
214 | model->calc(data, x); |
127 |
2/4✓ Branch 2 taken 214 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
|
214 | model->calcDiff(data, x); |
128 |
2/4✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 214 times.
✗ Branch 5 not taken.
|
214 | model_num_diff.calc(data_num_diff, x); |
129 |
2/4✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 214 times.
✗ Branch 5 not taken.
|
214 | model_num_diff.calcDiff(data_num_diff, x); |
130 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->h - data_num_diff->h).isZero(tol)); |
131 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->g - data_num_diff->g).isZero(tol)); |
132 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->Lx - data_num_diff->Lx).isZero(tol)); |
133 |
2/4✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 214 times.
|
214 | if (model_num_diff.get_with_gauss_approx()) { |
134 | ✗ | BOOST_CHECK((data->Lxx - data_num_diff->Lxx).isZero(tol)); | |
135 | } | ||
136 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->Hx - data_num_diff->Hx).isZero(tol)); |
137 |
8/16✓ Branch 1 taken 214 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 214 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 214 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 214 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 214 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 214 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 214 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 214 times.
|
214 | BOOST_CHECK((data->Gx - data_num_diff->Gx).isZero(tol)); |
138 | |||
139 | // Checking that casted computation is the same | ||
140 | #ifdef NDEBUG // Run only in release mode | ||
141 | std::shared_ptr<crocoddyl::ActionModelAbstractTpl<float>> casted_model = | ||
142 | model->cast<float>(); | ||
143 | std::shared_ptr<crocoddyl::ActionDataAbstractTpl<float>> casted_data = | ||
144 | casted_model->createData(); | ||
145 | const Eigen::VectorXf x_f = x.cast<float>(); | ||
146 | const Eigen::VectorXf u_f = u.cast<float>(); | ||
147 | model->calc(data, x, u); | ||
148 | model->calcDiff(data, x, u); | ||
149 | casted_model->calc(casted_data, x_f, u_f); | ||
150 | casted_model->calcDiff(casted_data, x_f, u_f); | ||
151 | float tol_f = 80.f * std::sqrt(2.0f * std::numeric_limits<float>::epsilon()); | ||
152 | BOOST_CHECK((data->h.cast<float>() - casted_data->h).isZero(tol_f)); | ||
153 | BOOST_CHECK((data->g.cast<float>() - casted_data->g).isZero(tol_f)); | ||
154 | BOOST_CHECK((data->Fx.cast<float>() - casted_data->Fx).isZero(tol_f)); | ||
155 | BOOST_CHECK((data->Fu.cast<float>() - casted_data->Fu).isZero(tol_f)); | ||
156 | BOOST_CHECK((data->Lx.cast<float>() - casted_data->Lx).isZero(tol_f)); | ||
157 | BOOST_CHECK((data->Lu.cast<float>() - casted_data->Lu).isZero(tol_f)); | ||
158 | BOOST_CHECK((data->Gx.cast<float>() - casted_data->Gx).isZero(tol_f)); | ||
159 | BOOST_CHECK((data->Gu.cast<float>() - casted_data->Gu).isZero(tol_f)); | ||
160 | BOOST_CHECK((data->Hx.cast<float>() - casted_data->Hx).isZero(tol_f)); | ||
161 | BOOST_CHECK((data->Hu.cast<float>() - casted_data->Hu).isZero(tol_f)); | ||
162 | crocoddyl::ActionModelNumDiffTpl<float> casted_model_num_diff = | ||
163 | model_num_diff.cast<float>(); | ||
164 | std::shared_ptr<crocoddyl::ActionDataAbstractTpl<float>> | ||
165 | casted_data_num_diff = casted_model_num_diff.createData(); | ||
166 | casted_model_num_diff.calc(casted_data_num_diff, x_f, u_f); | ||
167 | casted_model_num_diff.calcDiff(casted_data_num_diff, x_f, u_f); | ||
168 | tol_f = 80.0f * sqrt(casted_model_num_diff.get_disturbance()); | ||
169 | BOOST_CHECK((casted_data->Gx - casted_data_num_diff->Gx).isZero(tol_f)); | ||
170 | BOOST_CHECK((casted_data->Gu - casted_data_num_diff->Gu).isZero(tol_f)); | ||
171 | BOOST_CHECK((casted_data->Hx - casted_data_num_diff->Hx).isZero(tol_f)); | ||
172 | BOOST_CHECK((casted_data->Hu - casted_data_num_diff->Hu).isZero(tol_f)); | ||
173 | #endif | ||
174 | 214 | } | |
175 | |||
176 | 7 | void test_check_action_data(ActionModelTypes::Type action_model_type) { | |
177 | // create the model | ||
178 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | ActionModelFactory factory; |
179 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model = | ||
180 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | factory.create(action_model_type); |
181 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | test_check_data(model); |
182 | 7 | } | |
183 | |||
184 | 207 | void test_check_integrated_action_data( | |
185 | DifferentialActionModelTypes::Type dam_type, | ||
186 | IntegratorTypes::Type integrator_type, ControlTypes::Type control_type) { | ||
187 | // create the differential action model | ||
188 |
1/2✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
|
207 | DifferentialActionModelFactory factory_dam; |
189 | const std::shared_ptr<crocoddyl::DifferentialActionModelAbstract>& dam = | ||
190 |
1/2✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
|
207 | factory_dam.create(dam_type); |
191 | // create the control discretization | ||
192 |
1/2✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
|
207 | ControlFactory factory_ctrl; |
193 | const std::shared_ptr<crocoddyl::ControlParametrizationModelAbstract>& ctrl = | ||
194 |
2/4✓ Branch 2 taken 207 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 207 times.
✗ Branch 6 not taken.
|
207 | factory_ctrl.create(control_type, dam->get_nu()); |
195 | // create the integrator | ||
196 |
1/2✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
|
207 | IntegratorFactory factory_int; |
197 | const std::shared_ptr<crocoddyl::IntegratedActionModelAbstract>& model = | ||
198 |
1/2✓ Branch 3 taken 207 times.
✗ Branch 4 not taken.
|
207 | factory_int.create(integrator_type, dam, ctrl); |
199 |
1/2✓ Branch 2 taken 207 times.
✗ Branch 3 not taken.
|
207 | test_check_data(model); |
200 | 207 | } | |
201 | |||
202 | 7 | void test_calc_action_model(ActionModelTypes::Type action_model_type) { | |
203 | // create the model | ||
204 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | ActionModelFactory factory; |
205 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model = | ||
206 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | factory.create(action_model_type); |
207 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | test_calc(model); |
208 | 7 | } | |
209 | |||
210 | 207 | void test_calc_integrated_action_model( | |
211 | DifferentialActionModelTypes::Type dam_type, | ||
212 | IntegratorTypes::Type integrator_type, ControlTypes::Type control_type) { | ||
213 | // create the differential action model | ||
214 |
1/2✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
|
207 | DifferentialActionModelFactory factory_dam; |
215 | const std::shared_ptr<crocoddyl::DifferentialActionModelAbstract>& dam = | ||
216 |
1/2✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
|
207 | factory_dam.create(dam_type); |
217 | // create the control discretization | ||
218 |
1/2✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
|
207 | ControlFactory factory_ctrl; |
219 | const std::shared_ptr<crocoddyl::ControlParametrizationModelAbstract>& ctrl = | ||
220 |
2/4✓ Branch 2 taken 207 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 207 times.
✗ Branch 6 not taken.
|
207 | factory_ctrl.create(control_type, dam->get_nu()); |
221 | // create the integrator | ||
222 |
1/2✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
|
207 | IntegratorFactory factory_int; |
223 | const std::shared_ptr<crocoddyl::IntegratedActionModelAbstract>& model = | ||
224 |
1/2✓ Branch 3 taken 207 times.
✗ Branch 4 not taken.
|
207 | factory_int.create(integrator_type, dam, ctrl); |
225 |
1/2✓ Branch 2 taken 207 times.
✗ Branch 3 not taken.
|
207 | test_calc(model); |
226 | 207 | } | |
227 | |||
228 | 7 | void test_partial_derivatives_action_model( | |
229 | ActionModelTypes::Type action_model_type) { | ||
230 | // create the model | ||
231 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | ActionModelFactory factory; |
232 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model = | ||
233 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | factory.create(action_model_type); |
234 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | test_partial_derivatives_against_numdiff(model); |
235 | 7 | } | |
236 | |||
237 | 207 | void test_partial_derivatives_integrated_action_model( | |
238 | DifferentialActionModelTypes::Type dam_type, | ||
239 | IntegratorTypes::Type integrator_type, ControlTypes::Type control_type) { | ||
240 | // create the differential action model | ||
241 |
1/2✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
|
207 | DifferentialActionModelFactory factory_dam; |
242 | const std::shared_ptr<crocoddyl::DifferentialActionModelAbstract>& dam = | ||
243 |
1/2✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
|
207 | factory_dam.create(dam_type); |
244 | // create the control discretization | ||
245 |
1/2✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
|
207 | ControlFactory factory_ctrl; |
246 | const std::shared_ptr<crocoddyl::ControlParametrizationModelAbstract>& ctrl = | ||
247 |
2/4✓ Branch 2 taken 207 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 207 times.
✗ Branch 6 not taken.
|
207 | factory_ctrl.create(control_type, dam->get_nu()); |
248 | // create the integrator | ||
249 |
1/2✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
|
207 | IntegratorFactory factory_int; |
250 | const std::shared_ptr<crocoddyl::IntegratedActionModelAbstract>& model = | ||
251 |
1/2✓ Branch 3 taken 207 times.
✗ Branch 4 not taken.
|
207 | factory_int.create(integrator_type, dam, ctrl); |
252 |
1/2✓ Branch 2 taken 207 times.
✗ Branch 3 not taken.
|
207 | test_partial_derivatives_against_numdiff(model); |
253 | 207 | } | |
254 | |||
255 | /** | ||
256 | * Test two action models that should provide the same result when calling calc | ||
257 | * if the first part of the control input u of model2 is equal to the control | ||
258 | * input of model1. A typical case would be an integrated action model using an | ||
259 | * Euler integration scheme, which can be coupled either with a constant control | ||
260 | * parametrization (model1) or a linear control parametrization (model2), and | ||
261 | * should thus provide the same result as long as the control input at the | ||
262 | * beginning of the step has the same value. | ||
263 | */ | ||
264 | 46 | void test_calc_against_calc( | |
265 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model1, | ||
266 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model2) { | ||
267 | // create the corresponding data object and set the cost to nan | ||
268 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data1 = | ||
269 |
1/2✓ Branch 2 taken 46 times.
✗ Branch 3 not taken.
|
46 | model1->createData(); |
270 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data2 = | ||
271 |
1/2✓ Branch 2 taken 46 times.
✗ Branch 3 not taken.
|
46 | model2->createData(); |
272 | |||
273 | // Generating random values for the state and control | ||
274 |
2/4✓ Branch 2 taken 46 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 46 times.
✗ Branch 7 not taken.
|
46 | const Eigen::VectorXd x = model1->get_state()->rand(); |
275 |
3/6✓ Branch 2 taken 46 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 46 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 46 times.
✗ Branch 9 not taken.
|
46 | Eigen::VectorXd u1 = Eigen::VectorXd::Random(model1->get_nu()); |
276 |
3/6✓ Branch 2 taken 46 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 46 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 46 times.
✗ Branch 9 not taken.
|
46 | Eigen::VectorXd u2 = Eigen::VectorXd::Random(model2->get_nu()); |
277 | // copy u1 to the first part of u2 (assuming u2 is larger than u1) | ||
278 |
2/4✓ Branch 2 taken 46 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 46 times.
✗ Branch 6 not taken.
|
46 | u2.head(u1.size()) = u1; |
279 | |||
280 | // Computing the action | ||
281 |
3/6✓ Branch 2 taken 46 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 46 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 46 times.
✗ Branch 9 not taken.
|
46 | model1->calc(data1, x, u1); |
282 |
3/6✓ Branch 2 taken 46 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 46 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 46 times.
✗ Branch 9 not taken.
|
46 | model2->calc(data2, x, u2); |
283 | |||
284 | // Checking the state and cost integration | ||
285 |
8/16✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 46 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 46 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 46 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 46 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 46 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 46 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 46 times.
|
46 | BOOST_CHECK((data1->xnext - data2->xnext).isZero(1e-9)); |
286 |
6/12✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 46 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 46 times.
✗ Branch 12 not taken.
✓ Branch 17 taken 46 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 46 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 46 times.
|
46 | BOOST_CHECK(abs(data1->cost - data2->cost) < 1e-9); |
287 | 46 | } | |
288 | |||
289 | 46 | void register_test_calc_integrated_action_model( | |
290 | DifferentialActionModelTypes::Type dam_type, | ||
291 | IntegratorTypes::Type integrator_type, ControlTypes::Type control_type1, | ||
292 | ControlTypes::Type control_type2) { | ||
293 | // create the differential action model | ||
294 |
1/2✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
|
46 | DifferentialActionModelFactory factory_dam; |
295 | const std::shared_ptr<crocoddyl::DifferentialActionModelAbstract>& dam = | ||
296 |
1/2✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
|
46 | factory_dam.create(dam_type); |
297 | // create the control discretization | ||
298 |
1/2✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
|
46 | ControlFactory factory_ctrl; |
299 | const std::shared_ptr<crocoddyl::ControlParametrizationModelAbstract>& ctrl1 = | ||
300 |
2/4✓ Branch 2 taken 46 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 46 times.
✗ Branch 6 not taken.
|
46 | factory_ctrl.create(control_type1, dam->get_nu()); |
301 | const std::shared_ptr<crocoddyl::ControlParametrizationModelAbstract>& ctrl2 = | ||
302 |
2/4✓ Branch 2 taken 46 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 46 times.
✗ Branch 6 not taken.
|
46 | factory_ctrl.create(control_type2, dam->get_nu()); |
303 | // create the integrator | ||
304 |
1/2✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
|
46 | IntegratorFactory factory_int; |
305 | const std::shared_ptr<crocoddyl::IntegratedActionModelAbstract>& model1 = | ||
306 |
1/2✓ Branch 3 taken 46 times.
✗ Branch 4 not taken.
|
46 | factory_int.create(integrator_type, dam, ctrl1); |
307 | const std::shared_ptr<crocoddyl::IntegratedActionModelAbstract>& model2 = | ||
308 |
1/2✓ Branch 3 taken 46 times.
✗ Branch 4 not taken.
|
46 | factory_int.create(integrator_type, dam, ctrl2); |
309 | |||
310 |
2/4✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 46 times.
✗ Branch 5 not taken.
|
46 | boost::test_tools::output_test_stream test_name; |
311 |
3/6✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 46 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 46 times.
✗ Branch 8 not taken.
|
46 | test_name << "test_calc_integrated_action_model_" << dam_type << "_" |
312 |
5/10✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 46 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 46 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 46 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 46 times.
✗ Branch 14 not taken.
|
46 | << integrator_type << "_" << control_type1 << "_" << control_type2; |
313 |
4/8✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 46 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 46 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 46 times.
✗ Branch 11 not taken.
|
46 | std::cout << "Running " << test_name.str() << std::endl; |
314 |
4/8✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 46 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 46 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 46 times.
✗ Branch 12 not taken.
|
46 | test_suite* ts = BOOST_TEST_SUITE(test_name.str()); |
315 | 92 | ts->add( | |
316 |
5/10✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 46 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 46 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 46 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 46 times.
✗ Branch 17 not taken.
|
46 | BOOST_TEST_CASE(boost::bind(&test_calc_against_calc, model1, model2))); |
317 |
3/6✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 46 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 46 times.
✗ Branch 7 not taken.
|
46 | framework::master_test_suite().add(ts); |
318 | 46 | } | |
319 | |||
320 | //----------------------------------------------------------------------------// | ||
321 | |||
322 | 7 | void register_action_model_unit_tests( | |
323 | ActionModelTypes::Type action_model_type) { | ||
324 |
2/4✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7 times.
✗ Branch 5 not taken.
|
7 | boost::test_tools::output_test_stream test_name; |
325 |
2/4✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7 times.
✗ Branch 5 not taken.
|
7 | test_name << "test_" << action_model_type; |
326 |
4/8✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 7 times.
✗ Branch 11 not taken.
|
7 | std::cout << "Running " << test_name.str() << std::endl; |
327 |
4/8✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 7 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 7 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 7 times.
✗ Branch 12 not taken.
|
7 | test_suite* ts = BOOST_TEST_SUITE(test_name.str()); |
328 | 14 | ts->add( | |
329 |
5/10✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 7 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 7 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 7 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 7 times.
✗ Branch 15 not taken.
|
7 | BOOST_TEST_CASE(boost::bind(&test_check_action_data, action_model_type))); |
330 | 14 | ts->add( | |
331 |
5/10✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 7 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 7 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 7 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 7 times.
✗ Branch 15 not taken.
|
7 | BOOST_TEST_CASE(boost::bind(&test_calc_action_model, action_model_type))); |
332 |
5/10✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 7 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 7 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 7 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 7 times.
✗ Branch 15 not taken.
|
7 | ts->add(BOOST_TEST_CASE( |
333 | boost::bind(&test_partial_derivatives_action_model, action_model_type))); | ||
334 |
3/6✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
|
7 | framework::master_test_suite().add(ts); |
335 | 7 | } | |
336 | |||
337 | 207 | void register_integrated_action_model_unit_tests( | |
338 | DifferentialActionModelTypes::Type dam_type, | ||
339 | IntegratorTypes::Type integrator_type, ControlTypes::Type control_type) { | ||
340 |
2/4✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 207 times.
✗ Branch 5 not taken.
|
207 | boost::test_tools::output_test_stream test_name; |
341 |
5/10✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 207 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 207 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 207 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 207 times.
✗ Branch 14 not taken.
|
207 | test_name << "test_" << dam_type << "_" << integrator_type << "_" |
342 |
1/2✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
|
207 | << control_type; |
343 |
4/8✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 207 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 207 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 207 times.
✗ Branch 11 not taken.
|
207 | std::cout << "Running " << test_name.str() << std::endl; |
344 |
4/8✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 207 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 207 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 207 times.
✗ Branch 12 not taken.
|
207 | test_suite* ts = BOOST_TEST_SUITE(test_name.str()); |
345 | 414 | ts->add( | |
346 |
5/10✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 207 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 207 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 207 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 207 times.
✗ Branch 15 not taken.
|
207 | BOOST_TEST_CASE(boost::bind(&test_check_integrated_action_data, dam_type, |
347 | integrator_type, control_type))); | ||
348 | 414 | ts->add( | |
349 |
5/10✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 207 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 207 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 207 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 207 times.
✗ Branch 15 not taken.
|
207 | BOOST_TEST_CASE(boost::bind(&test_calc_integrated_action_model, dam_type, |
350 | integrator_type, control_type))); | ||
351 |
5/10✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 207 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 207 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 207 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 207 times.
✗ Branch 15 not taken.
|
207 | ts->add(BOOST_TEST_CASE( |
352 | boost::bind(&test_partial_derivatives_integrated_action_model, dam_type, | ||
353 | integrator_type, control_type))); | ||
354 |
3/6✓ Branch 1 taken 207 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 207 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 207 times.
✗ Branch 7 not taken.
|
207 | framework::master_test_suite().add(ts); |
355 | 207 | } | |
356 | |||
357 | 1 | bool init_function() { | |
358 |
2/2✓ Branch 1 taken 7 times.
✓ Branch 2 taken 1 times.
|
8 | for (size_t i = 0; i < ActionModelTypes::all.size(); ++i) { |
359 | 7 | register_action_model_unit_tests(ActionModelTypes::all[i]); | |
360 | } | ||
361 | |||
362 |
2/2✓ Branch 1 taken 23 times.
✓ Branch 2 taken 1 times.
|
24 | for (size_t i = 0; i < DifferentialActionModelTypes::all.size(); ++i) { |
363 | 23 | register_integrated_action_model_unit_tests( | |
364 | 23 | DifferentialActionModelTypes::all[i], IntegratorTypes::IntegratorEuler, | |
365 | ControlTypes::PolyZero); | ||
366 | 23 | register_integrated_action_model_unit_tests( | |
367 | 23 | DifferentialActionModelTypes::all[i], IntegratorTypes::IntegratorRK2, | |
368 | ControlTypes::PolyZero); | ||
369 | 23 | register_integrated_action_model_unit_tests( | |
370 | 23 | DifferentialActionModelTypes::all[i], IntegratorTypes::IntegratorRK2, | |
371 | ControlTypes::PolyOne); | ||
372 | 23 | register_integrated_action_model_unit_tests( | |
373 | 23 | DifferentialActionModelTypes::all[i], IntegratorTypes::IntegratorRK3, | |
374 | ControlTypes::PolyZero); | ||
375 | 23 | register_integrated_action_model_unit_tests( | |
376 | 23 | DifferentialActionModelTypes::all[i], IntegratorTypes::IntegratorRK3, | |
377 | ControlTypes::PolyOne); | ||
378 | 23 | register_integrated_action_model_unit_tests( | |
379 | 23 | DifferentialActionModelTypes::all[i], IntegratorTypes::IntegratorRK3, | |
380 | ControlTypes::PolyTwoRK3); | ||
381 | 23 | register_integrated_action_model_unit_tests( | |
382 | 23 | DifferentialActionModelTypes::all[i], IntegratorTypes::IntegratorRK4, | |
383 | ControlTypes::PolyZero); | ||
384 | 23 | register_integrated_action_model_unit_tests( | |
385 | 23 | DifferentialActionModelTypes::all[i], IntegratorTypes::IntegratorRK4, | |
386 | ControlTypes::PolyOne); | ||
387 | 23 | register_integrated_action_model_unit_tests( | |
388 | 23 | DifferentialActionModelTypes::all[i], IntegratorTypes::IntegratorRK4, | |
389 | ControlTypes::PolyTwoRK4); | ||
390 | } | ||
391 | |||
392 |
2/2✓ Branch 1 taken 23 times.
✓ Branch 2 taken 1 times.
|
24 | for (size_t i = 0; i < DifferentialActionModelTypes::all.size(); ++i) { |
393 | 23 | register_test_calc_integrated_action_model( | |
394 | 23 | DifferentialActionModelTypes::all[i], IntegratorTypes::IntegratorEuler, | |
395 | ControlTypes::PolyZero, ControlTypes::PolyOne); | ||
396 | 23 | register_test_calc_integrated_action_model( | |
397 | 23 | DifferentialActionModelTypes::all[i], IntegratorTypes::IntegratorEuler, | |
398 | ControlTypes::PolyOne, ControlTypes::PolyTwoRK4); | ||
399 | } | ||
400 | 1 | return true; | |
401 | } | ||
402 | |||
403 | 1 | int main(int argc, char** argv) { | |
404 | 1 | return ::boost::unit_test::unit_test_main(&init_function, argc, argv); | |
405 | } | ||
406 |