Directory: | ./ |
---|---|
File: | unittest/test_problem.cpp |
Date: | 2025-03-26 19:23:43 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 314 | 314 | 100.0% |
Branches: | 912 | 1770 | 51.5% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | /////////////////////////////////////////////////////////////////////////////// | ||
2 | // BSD 3-Clause License | ||
3 | // | ||
4 | // Copyright (C) 2020-2025, University of Edinburgh | ||
5 | // Copyright note valid unless otherwise stated in individual files. | ||
6 | // All rights reserved. | ||
7 | /////////////////////////////////////////////////////////////////////////////// | ||
8 | |||
9 | #define BOOST_TEST_NO_MAIN | ||
10 | #define BOOST_TEST_ALTERNATIVE_INIT_API | ||
11 | |||
12 | #include "crocoddyl/core/integrator/euler.hpp" | ||
13 | #include "crocoddyl/core/optctrl/shooting.hpp" | ||
14 | #include "crocoddyl/core/utils/conversions.hpp" | ||
15 | #include "factory/action.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 | 7 | void test_calc(ActionModelTypes::Type action_model_type) { | |
26 | // create the model | ||
27 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | ActionModelFactory factory; |
28 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model = | ||
29 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | factory.create(action_model_type); |
30 | |||
31 | // create two shooting problems (with and without data allocation) | ||
32 | 7 | std::size_t T = 20; | |
33 |
2/4✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
|
7 | const Eigen::VectorXd& x0 = model->get_state()->rand(); |
34 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<std::shared_ptr<crocoddyl::ActionModelAbstract>> models(T, model); |
35 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<std::shared_ptr<crocoddyl::ActionDataAbstract>> datas(T); |
36 |
2/2✓ Branch 0 taken 140 times.
✓ Branch 1 taken 7 times.
|
147 | for (std::size_t i = 0; i < T; ++i) { |
37 |
1/2✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
|
140 | datas[i] = model->createData(); |
38 | } | ||
39 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | crocoddyl::ShootingProblem problem1(x0, models, model); |
40 | crocoddyl::ShootingProblem problem2(x0, models, model, datas, | ||
41 |
2/4✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
|
14 | model->createData()); |
42 | |||
43 | // Run the print function | ||
44 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | std::ostringstream tmp; |
45 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | tmp << problem1; |
46 | |||
47 | // create random trajectory | ||
48 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<Eigen::VectorXd> xs(T + 1); |
49 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<Eigen::VectorXd> us(T); |
50 |
2/2✓ Branch 0 taken 140 times.
✓ Branch 1 taken 7 times.
|
147 | for (std::size_t i = 0; i < T; ++i) { |
51 |
2/4✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 140 times.
✗ Branch 7 not taken.
|
140 | xs[i] = model->get_state()->rand(); |
52 |
3/6✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 140 times.
✗ Branch 10 not taken.
|
140 | us[i] = Eigen::VectorXd::Random(model->get_nu()); |
53 | } | ||
54 |
2/4✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
|
7 | xs.back() = model->get_state()->rand(); |
55 | |||
56 | // check the state and cost in each node | ||
57 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | double cost = problem1.calc(xs, us); |
58 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | problem2.calc(xs, us); |
59 |
2/2✓ Branch 0 taken 140 times.
✓ Branch 1 taken 7 times.
|
147 | for (std::size_t i = 0; i < T; ++i) { |
60 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
61 |
1/2✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
|
140 | model->createData(); |
62 |
3/6✓ Branch 3 taken 140 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 140 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 140 times.
✗ Branch 11 not taken.
|
140 | model->calc(data, xs[i], us[i]); |
63 |
7/14✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 140 times.
✗ Branch 15 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 140 times.
|
140 | BOOST_CHECK(problem1.get_runningDatas()[i]->cost == data->cost); |
64 |
7/14✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 140 times.
✗ Branch 15 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 140 times.
|
140 | BOOST_CHECK(problem2.get_runningDatas()[i]->cost == data->cost); |
65 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK( |
66 | (problem1.get_runningDatas()[i]->xnext - data->xnext).isZero(1e-9)); | ||
67 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK( |
68 | (problem2.get_runningDatas()[i]->xnext - data->xnext).isZero(1e-9)); | ||
69 | 140 | } | |
70 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
71 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | model->createData(); |
72 |
2/4✓ Branch 3 taken 7 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
|
7 | model->calc(data, xs.back()); |
73 |
7/14✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 7 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 7 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 7 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 7 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 7 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 7 times.
|
7 | BOOST_CHECK(problem1.get_terminalData()->cost == data->cost); |
74 |
7/14✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 7 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 7 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 7 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 7 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 7 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 7 times.
|
7 | BOOST_CHECK(problem2.get_terminalData()->cost == data->cost); |
75 |
9/18✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 7 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 7 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 7 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 7 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 7 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 7 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 7 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 7 times.
|
7 | BOOST_CHECK((problem1.get_terminalData()->xnext - data->xnext).isZero(1e-9)); |
76 |
9/18✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 7 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 7 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 7 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 7 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 7 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 7 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 7 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 7 times.
|
7 | BOOST_CHECK((problem2.get_terminalData()->xnext - data->xnext).isZero(1e-9)); |
77 | |||
78 | // Checking that casted computation is the same | ||
79 | #ifdef NDEBUG // Run only in release mode | ||
80 | crocoddyl::ShootingProblemTpl<float> casted_problem1 = problem1.cast<float>(); | ||
81 | crocoddyl::ShootingProblemTpl<float> casted_problem2 = problem2.cast<float>(); | ||
82 | std::vector<Eigen::VectorXf> xs_f(T + 1); | ||
83 | std::vector<Eigen::VectorXf> us_f(T); | ||
84 | for (std::size_t i = 0; i < T; ++i) { | ||
85 | xs_f[i] = xs[i].cast<float>(); | ||
86 | us_f[i] = us[i].cast<float>(); | ||
87 | } | ||
88 | xs_f.back() = xs.back().cast<float>(); | ||
89 | float cost_f = casted_problem1.calc(xs_f, us_f); | ||
90 | casted_problem2.calc(xs_f, us_f); | ||
91 | float tol_f = std::sqrt(2.0f * std::numeric_limits<float>::epsilon()); | ||
92 | for (std::size_t i = 0; i < T; ++i) { | ||
93 | const std::shared_ptr<crocoddyl::ActionModelAbstractTpl<float>>& | ||
94 | casted_model = model->cast<float>(); | ||
95 | const std::shared_ptr<crocoddyl::ActionDataAbstractTpl<float>>& | ||
96 | casted_data = casted_model->createData(); | ||
97 | casted_model->calc(casted_data, xs_f[i], us_f[i]); | ||
98 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->cost == | ||
99 | casted_data->cost); | ||
100 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->cost == | ||
101 | casted_data->cost); | ||
102 | BOOST_CHECK( | ||
103 | (casted_problem1.get_runningDatas()[i]->xnext - casted_data->xnext) | ||
104 | .isZero(1e-9f)); | ||
105 | BOOST_CHECK( | ||
106 | (casted_problem2.get_runningDatas()[i]->xnext - casted_data->xnext) | ||
107 | .isZero(1e-9f)); | ||
108 | BOOST_CHECK(float(problem1.get_runningDatas()[i]->cost) - | ||
109 | casted_data->cost <= | ||
110 | tol_f); | ||
111 | BOOST_CHECK((problem1.get_runningDatas()[i]->xnext.cast<float>() - | ||
112 | casted_data->xnext) | ||
113 | .isZero(tol_f)); | ||
114 | } | ||
115 | BOOST_CHECK(std::abs(float(cost) - cost_f) <= tol_f); | ||
116 | #endif | ||
117 | 7 | } | |
118 | |||
119 | 92 | void test_calc_diffAction(DifferentialActionModelTypes::Type action_model_type, | |
120 | IntegratorTypes::Type integrator_type) { | ||
121 | // create the model | ||
122 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | DifferentialActionModelFactory factory; |
123 | const std::shared_ptr<crocoddyl::DifferentialActionModelAbstract>& diffModel = | ||
124 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | factory.create(action_model_type); |
125 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | IntegratorFactory factory_int; |
126 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model = | ||
127 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | factory_int.create(integrator_type, diffModel); |
128 | |||
129 | // create two shooting problems (with and without data allocation) | ||
130 | 92 | std::size_t T = 20; | |
131 |
2/4✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 92 times.
✗ Branch 7 not taken.
|
92 | const Eigen::VectorXd& x0 = model->get_state()->rand(); |
132 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<std::shared_ptr<crocoddyl::ActionModelAbstract>> models(T, model); |
133 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<std::shared_ptr<crocoddyl::ActionDataAbstract>> datas(T); |
134 |
2/2✓ Branch 0 taken 1840 times.
✓ Branch 1 taken 92 times.
|
1932 | for (std::size_t i = 0; i < T; ++i) { |
135 |
1/2✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
|
1840 | datas[i] = model->createData(); |
136 | } | ||
137 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | crocoddyl::ShootingProblem problem1(x0, models, model); |
138 | crocoddyl::ShootingProblem problem2(x0, models, model, datas, | ||
139 |
2/4✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 92 times.
✗ Branch 7 not taken.
|
184 | model->createData()); |
140 | |||
141 | // create random trajectory | ||
142 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<Eigen::VectorXd> xs(T + 1); |
143 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<Eigen::VectorXd> us(T); |
144 |
2/2✓ Branch 0 taken 1840 times.
✓ Branch 1 taken 92 times.
|
1932 | for (std::size_t i = 0; i < T; ++i) { |
145 |
2/4✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1840 times.
✗ Branch 7 not taken.
|
1840 | xs[i] = model->get_state()->rand(); |
146 |
3/6✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1840 times.
✗ Branch 10 not taken.
|
1840 | us[i] = Eigen::VectorXd::Random(model->get_nu()); |
147 | } | ||
148 |
2/4✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 92 times.
✗ Branch 7 not taken.
|
92 | xs.back() = model->get_state()->rand(); |
149 | |||
150 | // check the state and cost in each node | ||
151 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | double cost = problem1.calc(xs, us); |
152 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | problem2.calc(xs, us); |
153 |
2/2✓ Branch 0 taken 1840 times.
✓ Branch 1 taken 92 times.
|
1932 | for (std::size_t i = 0; i < T; ++i) { |
154 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
155 |
1/2✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
|
1840 | model->createData(); |
156 |
3/6✓ Branch 3 taken 1840 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 1840 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1840 times.
✗ Branch 11 not taken.
|
1840 | model->calc(data, xs[i], us[i]); |
157 |
7/14✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1840 times.
✗ Branch 15 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1840 times.
|
1840 | BOOST_CHECK(problem1.get_runningDatas()[i]->cost == data->cost); |
158 |
7/14✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1840 times.
✗ Branch 15 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1840 times.
|
1840 | BOOST_CHECK(problem2.get_runningDatas()[i]->cost == data->cost); |
159 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK( |
160 | (problem1.get_runningDatas()[i]->xnext - data->xnext).isZero(1e-9)); | ||
161 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK( |
162 | (problem2.get_runningDatas()[i]->xnext - data->xnext).isZero(1e-9)); | ||
163 | 1840 | } | |
164 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
165 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | model->createData(); |
166 |
2/4✓ Branch 3 taken 92 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 92 times.
✗ Branch 7 not taken.
|
92 | model->calc(data, xs.back()); |
167 |
7/14✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 92 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 92 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 92 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 92 times.
|
92 | BOOST_CHECK(problem1.get_terminalData()->cost == data->cost); |
168 |
7/14✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 92 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 92 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 92 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 92 times.
|
92 | BOOST_CHECK(problem2.get_terminalData()->cost == data->cost); |
169 |
9/18✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 92 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 92 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 92 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 92 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 92 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 92 times.
|
92 | BOOST_CHECK((problem1.get_terminalData()->xnext - data->xnext).isZero(1e-9)); |
170 |
9/18✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 92 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 92 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 92 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 92 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 92 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 92 times.
|
92 | BOOST_CHECK((problem2.get_terminalData()->xnext - data->xnext).isZero(1e-9)); |
171 | |||
172 | // Checking that casted computation is the same | ||
173 | #ifdef NDEBUG // Run only in release mode | ||
174 | crocoddyl::ShootingProblemTpl<float> casted_problem1 = problem1.cast<float>(); | ||
175 | crocoddyl::ShootingProblemTpl<float> casted_problem2 = problem2.cast<float>(); | ||
176 | std::vector<Eigen::VectorXf> xs_f(T + 1); | ||
177 | std::vector<Eigen::VectorXf> us_f(T); | ||
178 | for (std::size_t i = 0; i < T; ++i) { | ||
179 | xs_f[i] = xs[i].cast<float>(); | ||
180 | us_f[i] = us[i].cast<float>(); | ||
181 | } | ||
182 | xs_f.back() = xs.back().cast<float>(); | ||
183 | float cost_f = casted_problem1.calc(xs_f, us_f); | ||
184 | casted_problem2.calc(xs_f, us_f); | ||
185 | float tol_f = 80.f * std::sqrt(2.0f * std::numeric_limits<float>::epsilon()); | ||
186 | for (std::size_t i = 0; i < T; ++i) { | ||
187 | const std::shared_ptr<crocoddyl::ActionModelAbstractTpl<float>>& | ||
188 | casted_model = model->cast<float>(); | ||
189 | const std::shared_ptr<crocoddyl::ActionDataAbstractTpl<float>>& | ||
190 | casted_data = casted_model->createData(); | ||
191 | casted_model->calc(casted_data, xs_f[i], us_f[i]); | ||
192 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->cost == | ||
193 | casted_data->cost); | ||
194 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->cost == | ||
195 | casted_data->cost); | ||
196 | BOOST_CHECK( | ||
197 | (casted_problem1.get_runningDatas()[i]->xnext - casted_data->xnext) | ||
198 | .isZero(1e-9f)); | ||
199 | BOOST_CHECK( | ||
200 | (casted_problem2.get_runningDatas()[i]->xnext - casted_data->xnext) | ||
201 | .isZero(1e-9f)); | ||
202 | BOOST_CHECK(std::abs(float(problem1.get_runningDatas()[i]->cost) - | ||
203 | casted_data->cost) <= tol_f); | ||
204 | BOOST_CHECK((problem1.get_runningDatas()[i]->xnext.cast<float>() - | ||
205 | casted_data->xnext) | ||
206 | .isZero(tol_f)); | ||
207 | } | ||
208 | BOOST_CHECK(std::abs(float(cost) - cost_f) <= tol_f); | ||
209 | #endif | ||
210 | 92 | } | |
211 | |||
212 | 7 | void test_calcDiff(ActionModelTypes::Type action_model_type) { | |
213 | // create the model | ||
214 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | ActionModelFactory factory; |
215 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model = | ||
216 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | factory.create(action_model_type); |
217 | |||
218 | // create two shooting problems (with and without data allocation) | ||
219 | 7 | std::size_t T = 20; | |
220 |
2/4✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
|
7 | const Eigen::VectorXd& x0 = model->get_state()->rand(); |
221 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<std::shared_ptr<crocoddyl::ActionModelAbstract>> models(T, model); |
222 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<std::shared_ptr<crocoddyl::ActionDataAbstract>> datas(T); |
223 |
2/2✓ Branch 0 taken 140 times.
✓ Branch 1 taken 7 times.
|
147 | for (std::size_t i = 0; i < T; ++i) { |
224 |
1/2✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
|
140 | datas[i] = model->createData(); |
225 | } | ||
226 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | crocoddyl::ShootingProblem problem1(x0, models, model); |
227 | crocoddyl::ShootingProblem problem2(x0, models, model, datas, | ||
228 |
2/4✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
|
14 | model->createData()); |
229 | |||
230 | // create random trajectory | ||
231 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<Eigen::VectorXd> xs(T + 1); |
232 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<Eigen::VectorXd> us(T); |
233 |
2/2✓ Branch 0 taken 140 times.
✓ Branch 1 taken 7 times.
|
147 | for (std::size_t i = 0; i < T; ++i) { |
234 |
2/4✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 140 times.
✗ Branch 7 not taken.
|
140 | xs[i] = model->get_state()->rand(); |
235 |
3/6✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 140 times.
✗ Branch 10 not taken.
|
140 | us[i] = Eigen::VectorXd::Random(model->get_nu()); |
236 | } | ||
237 |
2/4✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
|
7 | xs.back() = model->get_state()->rand(); |
238 | |||
239 | // check the state and cost in each node | ||
240 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | problem1.calc(xs, us); |
241 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | problem2.calc(xs, us); |
242 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | problem1.calcDiff(xs, us); |
243 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | problem2.calcDiff(xs, us); |
244 |
2/2✓ Branch 0 taken 140 times.
✓ Branch 1 taken 7 times.
|
147 | for (std::size_t i = 0; i < T; ++i) { |
245 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
246 |
1/2✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
|
140 | model->createData(); |
247 |
3/6✓ Branch 3 taken 140 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 140 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 140 times.
✗ Branch 11 not taken.
|
140 | model->calc(data, xs[i], us[i]); |
248 |
3/6✓ Branch 3 taken 140 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 140 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 140 times.
✗ Branch 11 not taken.
|
140 | model->calcDiff(data, xs[i], us[i]); |
249 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK((problem1.get_runningDatas()[i]->Fx - data->Fx).isZero(1e-9)); |
250 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK((problem2.get_runningDatas()[i]->Fx - data->Fx).isZero(1e-9)); |
251 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK((problem1.get_runningDatas()[i]->Fu - data->Fu).isZero(1e-9)); |
252 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK((problem2.get_runningDatas()[i]->Fu - data->Fu).isZero(1e-9)); |
253 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK((problem1.get_runningDatas()[i]->Lx - data->Lx).isZero(1e-9)); |
254 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK((problem2.get_runningDatas()[i]->Lx - data->Lx).isZero(1e-9)); |
255 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK((problem1.get_runningDatas()[i]->Lu - data->Lu).isZero(1e-9)); |
256 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK((problem2.get_runningDatas()[i]->Lu - data->Lu).isZero(1e-9)); |
257 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK((problem1.get_runningDatas()[i]->Lxx - data->Lxx).isZero(1e-9)); |
258 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK((problem2.get_runningDatas()[i]->Lxx - data->Lxx).isZero(1e-9)); |
259 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK((problem1.get_runningDatas()[i]->Lxu - data->Lxu).isZero(1e-9)); |
260 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK((problem2.get_runningDatas()[i]->Lxu - data->Lxu).isZero(1e-9)); |
261 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK((problem1.get_runningDatas()[i]->Luu - data->Luu).isZero(1e-9)); |
262 |
9/18✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 140 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 140 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 140 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 140 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 140 times.
|
140 | BOOST_CHECK((problem2.get_runningDatas()[i]->Luu - data->Luu).isZero(1e-9)); |
263 | 140 | } | |
264 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
265 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | model->createData(); |
266 |
2/4✓ Branch 3 taken 7 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
|
7 | model->calc(data, xs.back()); |
267 |
2/4✓ Branch 3 taken 7 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
|
7 | model->calcDiff(data, xs.back()); |
268 |
9/18✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 7 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 7 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 7 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 7 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 7 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 7 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 7 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 7 times.
|
7 | BOOST_CHECK((problem1.get_terminalData()->Fx - data->Fx).isZero(1e-9)); |
269 |
9/18✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 7 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 7 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 7 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 7 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 7 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 7 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 7 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 7 times.
|
7 | BOOST_CHECK((problem2.get_terminalData()->Fx - data->Fx).isZero(1e-9)); |
270 |
9/18✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 7 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 7 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 7 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 7 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 7 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 7 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 7 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 7 times.
|
7 | BOOST_CHECK((problem1.get_terminalData()->Lx - data->Lx).isZero(1e-9)); |
271 |
9/18✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 7 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 7 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 7 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 7 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 7 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 7 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 7 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 7 times.
|
7 | BOOST_CHECK((problem2.get_terminalData()->Lx - data->Lx).isZero(1e-9)); |
272 |
9/18✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 7 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 7 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 7 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 7 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 7 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 7 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 7 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 7 times.
|
7 | BOOST_CHECK((problem1.get_terminalData()->Lxx - data->Lxx).isZero(1e-9)); |
273 |
9/18✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 7 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 7 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 7 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 7 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 7 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 7 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 7 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 7 times.
|
7 | BOOST_CHECK((problem2.get_terminalData()->Lxx - data->Lxx).isZero(1e-9)); |
274 | |||
275 | // Checking that casted computation is the same | ||
276 | #ifdef NDEBUG // Run only in release mode | ||
277 | crocoddyl::ShootingProblemTpl<float> casted_problem1 = problem1.cast<float>(); | ||
278 | crocoddyl::ShootingProblemTpl<float> casted_problem2 = problem2.cast<float>(); | ||
279 | std::vector<Eigen::VectorXf> xs_f(T + 1); | ||
280 | std::vector<Eigen::VectorXf> us_f(T); | ||
281 | for (std::size_t i = 0; i < T; ++i) { | ||
282 | xs_f[i] = xs[i].cast<float>(); | ||
283 | us_f[i] = us[i].cast<float>(); | ||
284 | } | ||
285 | xs_f.back() = xs.back().cast<float>(); | ||
286 | casted_problem1.calc(xs_f, us_f); | ||
287 | casted_problem1.calcDiff(xs_f, us_f); | ||
288 | casted_problem2.calc(xs_f, us_f); | ||
289 | casted_problem2.calcDiff(xs_f, us_f); | ||
290 | float tol_f = 10.f * std::sqrt(2.0f * std::numeric_limits<float>::epsilon()); | ||
291 | for (std::size_t i = 0; i < T; ++i) { | ||
292 | const std::shared_ptr<crocoddyl::ActionModelAbstractTpl<float>>& | ||
293 | casted_model = model->cast<float>(); | ||
294 | const std::shared_ptr<crocoddyl::ActionDataAbstractTpl<float>>& | ||
295 | casted_data = casted_model->createData(); | ||
296 | casted_model->calc(casted_data, xs_f[i], us_f[i]); | ||
297 | casted_model->calcDiff(casted_data, xs_f[i], us_f[i]); | ||
298 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->Fx == casted_data->Fx); | ||
299 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->Fx == casted_data->Fx); | ||
300 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->Fu == casted_data->Fu); | ||
301 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->Fu == casted_data->Fu); | ||
302 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->Lx == casted_data->Lx); | ||
303 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->Lx == casted_data->Lx); | ||
304 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->Lu == casted_data->Lu); | ||
305 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->Lu == casted_data->Lu); | ||
306 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->Lxx == casted_data->Lxx); | ||
307 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->Lxx == casted_data->Lxx); | ||
308 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->Lxu == casted_data->Lxu); | ||
309 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->Lxu == casted_data->Lxu); | ||
310 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->Luu == casted_data->Luu); | ||
311 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->Luu == casted_data->Luu); | ||
312 | BOOST_CHECK( | ||
313 | (problem1.get_runningDatas()[i]->Fx.cast<float>() - casted_data->Fx) | ||
314 | .isZero(tol_f)); | ||
315 | BOOST_CHECK( | ||
316 | (problem1.get_runningDatas()[i]->Fu.cast<float>() - casted_data->Fu) | ||
317 | .isZero(tol_f)); | ||
318 | BOOST_CHECK( | ||
319 | (problem1.get_runningDatas()[i]->Lx.cast<float>() - casted_data->Lx) | ||
320 | .isZero(tol_f)); | ||
321 | BOOST_CHECK( | ||
322 | (problem1.get_runningDatas()[i]->Lu.cast<float>() - casted_data->Lu) | ||
323 | .isZero(tol_f)); | ||
324 | BOOST_CHECK( | ||
325 | (problem1.get_runningDatas()[i]->Lxx.cast<float>() - casted_data->Lxx) | ||
326 | .isZero(tol_f)); | ||
327 | BOOST_CHECK( | ||
328 | (problem1.get_runningDatas()[i]->Lxu.cast<float>() - casted_data->Lxu) | ||
329 | .isZero(tol_f)); | ||
330 | BOOST_CHECK( | ||
331 | (problem1.get_runningDatas()[i]->Luu.cast<float>() - casted_data->Luu) | ||
332 | .isZero(tol_f)); | ||
333 | } | ||
334 | #endif | ||
335 | 7 | } | |
336 | |||
337 | 92 | void test_calcDiff_diffAction( | |
338 | DifferentialActionModelTypes::Type action_model_type, | ||
339 | IntegratorTypes::Type integrator_type) { | ||
340 | // create the model | ||
341 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | DifferentialActionModelFactory factory; |
342 | const std::shared_ptr<crocoddyl::DifferentialActionModelAbstract>& diffModel = | ||
343 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | factory.create(action_model_type); |
344 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | IntegratorFactory factory_int; |
345 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model = | ||
346 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | factory_int.create(integrator_type, diffModel); |
347 | |||
348 | // create two shooting problems (with and without data allocation) | ||
349 | 92 | std::size_t T = 20; | |
350 |
2/4✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 92 times.
✗ Branch 7 not taken.
|
92 | const Eigen::VectorXd& x0 = model->get_state()->rand(); |
351 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<std::shared_ptr<crocoddyl::ActionModelAbstract>> models(T, model); |
352 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<std::shared_ptr<crocoddyl::ActionDataAbstract>> datas(T); |
353 |
2/2✓ Branch 0 taken 1840 times.
✓ Branch 1 taken 92 times.
|
1932 | for (std::size_t i = 0; i < T; ++i) { |
354 |
1/2✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
|
1840 | datas[i] = model->createData(); |
355 | } | ||
356 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | crocoddyl::ShootingProblem problem1(x0, models, model); |
357 | crocoddyl::ShootingProblem problem2(x0, models, model, datas, | ||
358 |
2/4✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 92 times.
✗ Branch 7 not taken.
|
184 | model->createData()); |
359 | |||
360 | // create random trajectory | ||
361 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<Eigen::VectorXd> xs(T + 1); |
362 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<Eigen::VectorXd> us(T); |
363 |
2/2✓ Branch 0 taken 1840 times.
✓ Branch 1 taken 92 times.
|
1932 | for (std::size_t i = 0; i < T; ++i) { |
364 |
2/4✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1840 times.
✗ Branch 7 not taken.
|
1840 | xs[i] = model->get_state()->rand(); |
365 |
3/6✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1840 times.
✗ Branch 10 not taken.
|
1840 | us[i] = Eigen::VectorXd::Random(model->get_nu()); |
366 | } | ||
367 |
2/4✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 92 times.
✗ Branch 7 not taken.
|
92 | xs.back() = model->get_state()->rand(); |
368 | |||
369 | // check the state and cost in each node | ||
370 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | problem1.calc(xs, us); |
371 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | problem2.calc(xs, us); |
372 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | problem1.calcDiff(xs, us); |
373 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | problem2.calcDiff(xs, us); |
374 |
2/2✓ Branch 0 taken 1840 times.
✓ Branch 1 taken 92 times.
|
1932 | for (std::size_t i = 0; i < T; ++i) { |
375 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
376 |
1/2✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
|
1840 | model->createData(); |
377 |
3/6✓ Branch 3 taken 1840 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 1840 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1840 times.
✗ Branch 11 not taken.
|
1840 | model->calc(data, xs[i], us[i]); |
378 |
3/6✓ Branch 3 taken 1840 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 1840 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1840 times.
✗ Branch 11 not taken.
|
1840 | model->calcDiff(data, xs[i], us[i]); |
379 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK((problem1.get_runningDatas()[i]->Fx - data->Fx).isZero(1e-7)); |
380 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK((problem2.get_runningDatas()[i]->Fx - data->Fx).isZero(1e-7)); |
381 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK((problem1.get_runningDatas()[i]->Fu - data->Fu).isZero(1e-7)); |
382 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK((problem2.get_runningDatas()[i]->Fu - data->Fu).isZero(1e-7)); |
383 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK((problem1.get_runningDatas()[i]->Lx - data->Lx).isZero(1e-7)); |
384 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK((problem2.get_runningDatas()[i]->Lx - data->Lx).isZero(1e-7)); |
385 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK((problem1.get_runningDatas()[i]->Lu - data->Lu).isZero(1e-7)); |
386 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK((problem2.get_runningDatas()[i]->Lu - data->Lu).isZero(1e-7)); |
387 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK((problem1.get_runningDatas()[i]->Lxx - data->Lxx).isZero(1e-7)); |
388 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK((problem2.get_runningDatas()[i]->Lxx - data->Lxx).isZero(1e-7)); |
389 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK((problem1.get_runningDatas()[i]->Lxu - data->Lxu).isZero(1e-7)); |
390 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK((problem2.get_runningDatas()[i]->Lxu - data->Lxu).isZero(1e-7)); |
391 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK((problem1.get_runningDatas()[i]->Luu - data->Luu).isZero(1e-7)); |
392 |
9/18✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1840 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1840 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1840 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1840 times.
✗ Branch 30 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1840 times.
|
1840 | BOOST_CHECK((problem2.get_runningDatas()[i]->Luu - data->Luu).isZero(1e-7)); |
393 | 1840 | } | |
394 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
395 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | model->createData(); |
396 |
2/4✓ Branch 3 taken 92 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 92 times.
✗ Branch 7 not taken.
|
92 | model->calc(data, xs.back()); |
397 |
2/4✓ Branch 3 taken 92 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 92 times.
✗ Branch 7 not taken.
|
92 | model->calcDiff(data, xs.back()); |
398 |
9/18✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 92 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 92 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 92 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 92 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 92 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 92 times.
|
92 | BOOST_CHECK((problem1.get_terminalData()->Fx - data->Fx).isZero(1e-7)); |
399 |
9/18✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 92 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 92 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 92 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 92 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 92 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 92 times.
|
92 | BOOST_CHECK((problem2.get_terminalData()->Fx - data->Fx).isZero(1e-7)); |
400 |
9/18✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 92 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 92 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 92 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 92 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 92 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 92 times.
|
92 | BOOST_CHECK((problem1.get_terminalData()->Lx - data->Lx).isZero(1e-7)); |
401 |
9/18✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 92 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 92 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 92 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 92 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 92 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 92 times.
|
92 | BOOST_CHECK((problem2.get_terminalData()->Lx - data->Lx).isZero(1e-7)); |
402 |
9/18✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 92 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 92 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 92 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 92 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 92 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 92 times.
|
92 | BOOST_CHECK((problem1.get_terminalData()->Lxx - data->Lxx).isZero(1e-7)); |
403 |
9/18✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 92 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 92 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 92 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 92 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 92 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 92 times.
|
92 | BOOST_CHECK((problem2.get_terminalData()->Lxx - data->Lxx).isZero(1e-7)); |
404 | |||
405 | // Checking that casted computation is the same | ||
406 | #ifdef NDEBUG // Run only in release mode | ||
407 | crocoddyl::ShootingProblemTpl<float> casted_problem1 = problem1.cast<float>(); | ||
408 | crocoddyl::ShootingProblemTpl<float> casted_problem2 = problem2.cast<float>(); | ||
409 | std::vector<Eigen::VectorXf> xs_f(T + 1); | ||
410 | std::vector<Eigen::VectorXf> us_f(T); | ||
411 | for (std::size_t i = 0; i < T; ++i) { | ||
412 | xs_f[i] = xs[i].cast<float>(); | ||
413 | us_f[i] = us[i].cast<float>(); | ||
414 | } | ||
415 | xs_f.back() = xs.back().cast<float>(); | ||
416 | casted_problem1.calc(xs_f, us_f); | ||
417 | casted_problem1.calcDiff(xs_f, us_f); | ||
418 | casted_problem2.calc(xs_f, us_f); | ||
419 | casted_problem2.calcDiff(xs_f, us_f); | ||
420 | float tol_f = 80.f * std::sqrt(2.0f * std::numeric_limits<float>::epsilon()); | ||
421 | for (std::size_t i = 0; i < T; ++i) { | ||
422 | const std::shared_ptr<crocoddyl::ActionModelAbstractTpl<float>>& | ||
423 | casted_model = model->cast<float>(); | ||
424 | const std::shared_ptr<crocoddyl::ActionDataAbstractTpl<float>>& | ||
425 | casted_data = casted_model->createData(); | ||
426 | casted_model->calc(casted_data, xs_f[i], us_f[i]); | ||
427 | casted_model->calcDiff(casted_data, xs_f[i], us_f[i]); | ||
428 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->Fx == casted_data->Fx); | ||
429 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->Fx == casted_data->Fx); | ||
430 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->Fu == casted_data->Fu); | ||
431 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->Fu == casted_data->Fu); | ||
432 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->Lx == casted_data->Lx); | ||
433 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->Lx == casted_data->Lx); | ||
434 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->Lu == casted_data->Lu); | ||
435 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->Lu == casted_data->Lu); | ||
436 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->Lxx == casted_data->Lxx); | ||
437 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->Lxx == casted_data->Lxx); | ||
438 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->Lxu == casted_data->Lxu); | ||
439 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->Lxu == casted_data->Lxu); | ||
440 | BOOST_CHECK(casted_problem1.get_runningDatas()[i]->Luu == casted_data->Luu); | ||
441 | BOOST_CHECK(casted_problem2.get_runningDatas()[i]->Luu == casted_data->Luu); | ||
442 | BOOST_CHECK( | ||
443 | (problem1.get_runningDatas()[i]->Fx.cast<float>() - casted_data->Fx) | ||
444 | .isZero(tol_f)); | ||
445 | BOOST_CHECK( | ||
446 | (problem1.get_runningDatas()[i]->Fu.cast<float>() - casted_data->Fu) | ||
447 | .isZero(tol_f)); | ||
448 | BOOST_CHECK( | ||
449 | (problem1.get_runningDatas()[i]->Lx.cast<float>() - casted_data->Lx) | ||
450 | .isZero(tol_f)); | ||
451 | BOOST_CHECK( | ||
452 | (problem1.get_runningDatas()[i]->Lu.cast<float>() - casted_data->Lu) | ||
453 | .isZero(tol_f)); | ||
454 | BOOST_CHECK( | ||
455 | (problem1.get_runningDatas()[i]->Lxx.cast<float>() - casted_data->Lxx) | ||
456 | .isZero(20.f * tol_f)); | ||
457 | BOOST_CHECK( | ||
458 | (problem1.get_runningDatas()[i]->Lxu.cast<float>() - casted_data->Lxu) | ||
459 | .isZero(tol_f)); | ||
460 | BOOST_CHECK( | ||
461 | (problem1.get_runningDatas()[i]->Luu.cast<float>() - casted_data->Luu) | ||
462 | .isZero(tol_f)); | ||
463 | } | ||
464 | #endif | ||
465 | 92 | } | |
466 | |||
467 | 7 | void test_rollout(ActionModelTypes::Type action_model_type) { | |
468 | // create the model | ||
469 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | ActionModelFactory factory; |
470 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model = | ||
471 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | factory.create(action_model_type); |
472 | |||
473 | // create the shooting problem | ||
474 | 7 | std::size_t T = 20; | |
475 |
2/4✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
|
7 | const Eigen::VectorXd& x0 = model->get_state()->rand(); |
476 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<std::shared_ptr<crocoddyl::ActionModelAbstract>> models(T, model); |
477 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | crocoddyl::ShootingProblem problem(x0, models, model); |
478 | |||
479 | // create random trajectory | ||
480 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<Eigen::VectorXd> xs(T + 1); |
481 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<Eigen::VectorXd> us(T); |
482 |
2/2✓ Branch 0 taken 140 times.
✓ Branch 1 taken 7 times.
|
147 | for (std::size_t i = 0; i < T; ++i) { |
483 |
2/4✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 140 times.
✗ Branch 7 not taken.
|
140 | xs[i] = model->get_state()->zero(); |
484 |
3/6✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 140 times.
✗ Branch 10 not taken.
|
140 | us[i] = Eigen::VectorXd::Random(model->get_nu()); |
485 | } | ||
486 |
2/4✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
|
7 | xs.back() = model->get_state()->zero(); |
487 | |||
488 | // check the state and cost in each node | ||
489 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | problem.rollout(us, xs); |
490 |
2/2✓ Branch 0 taken 140 times.
✓ Branch 1 taken 7 times.
|
147 | for (std::size_t i = 0; i < T; ++i) { |
491 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
492 |
1/2✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
|
140 | model->createData(); |
493 |
3/6✓ Branch 3 taken 140 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 140 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 140 times.
✗ Branch 11 not taken.
|
140 | model->calc(data, xs[i], us[i]); |
494 |
8/16✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 140 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 140 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 140 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 140 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 140 times.
|
140 | BOOST_CHECK((xs[i + 1] - data->xnext).isZero(1e-7)); |
495 | 140 | } | |
496 | 7 | } | |
497 | |||
498 | 92 | void test_rollout_diffAction( | |
499 | DifferentialActionModelTypes::Type action_model_type, | ||
500 | IntegratorTypes::Type integrator_type) { | ||
501 | // create the model | ||
502 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | DifferentialActionModelFactory factory; |
503 | const std::shared_ptr<crocoddyl::DifferentialActionModelAbstract>& diffModel = | ||
504 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | factory.create(action_model_type); |
505 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | IntegratorFactory factory_int; |
506 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model = | ||
507 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | factory_int.create(integrator_type, diffModel); |
508 | |||
509 | // create the shooting problem | ||
510 | 92 | std::size_t T = 20; | |
511 |
2/4✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 92 times.
✗ Branch 7 not taken.
|
92 | const Eigen::VectorXd& x0 = model->get_state()->rand(); |
512 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<std::shared_ptr<crocoddyl::ActionModelAbstract>> models(T, model); |
513 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | crocoddyl::ShootingProblem problem(x0, models, model); |
514 | |||
515 | // create random trajectory | ||
516 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<Eigen::VectorXd> xs(T + 1); |
517 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<Eigen::VectorXd> us(T); |
518 |
2/2✓ Branch 0 taken 1840 times.
✓ Branch 1 taken 92 times.
|
1932 | for (std::size_t i = 0; i < T; ++i) { |
519 |
2/4✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1840 times.
✗ Branch 7 not taken.
|
1840 | xs[i] = model->get_state()->zero(); |
520 |
3/6✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1840 times.
✗ Branch 10 not taken.
|
1840 | us[i] = Eigen::VectorXd::Random(model->get_nu()); |
521 | } | ||
522 |
2/4✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 92 times.
✗ Branch 7 not taken.
|
92 | xs.back() = model->get_state()->zero(); |
523 | |||
524 | // check the state and cost in each node | ||
525 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | problem.rollout(us, xs); |
526 |
2/2✓ Branch 0 taken 1840 times.
✓ Branch 1 taken 92 times.
|
1932 | for (std::size_t i = 0; i < T; ++i) { |
527 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
528 |
1/2✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
|
1840 | model->createData(); |
529 |
3/6✓ Branch 3 taken 1840 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 1840 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1840 times.
✗ Branch 11 not taken.
|
1840 | model->calc(data, xs[i], us[i]); |
530 |
8/16✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1840 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1840 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1840 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1840 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 1840 times.
|
1840 | BOOST_CHECK((xs[i + 1] - data->xnext).isZero(1e-7)); |
531 | 1840 | } | |
532 | 92 | } | |
533 | |||
534 | 7 | void test_quasiStatic(ActionModelTypes::Type action_model_type) { | |
535 | // create the model | ||
536 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | ActionModelFactory factory; |
537 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model = | ||
538 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | factory.create(action_model_type); |
539 | |||
540 | // create two shooting problems (with and without data allocation) | ||
541 | 7 | std::size_t T = 20; | |
542 |
2/4✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
|
7 | const Eigen::VectorXd& x0 = model->get_state()->rand(); |
543 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<std::shared_ptr<crocoddyl::ActionModelAbstract>> models(T, model); |
544 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<std::shared_ptr<crocoddyl::ActionDataAbstract>> datas(T); |
545 |
2/2✓ Branch 0 taken 140 times.
✓ Branch 1 taken 7 times.
|
147 | for (std::size_t i = 0; i < T; ++i) { |
546 |
1/2✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
|
140 | datas[i] = model->createData(); |
547 | } | ||
548 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | crocoddyl::ShootingProblem problem1(x0, models, model); |
549 | crocoddyl::ShootingProblem problem2(x0, models, model, datas, | ||
550 |
2/4✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
|
14 | model->createData()); |
551 | |||
552 | // create random trajectory | ||
553 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<Eigen::VectorXd> xs(T); |
554 |
1/2✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
|
7 | std::vector<Eigen::VectorXd> us(T); |
555 |
2/2✓ Branch 0 taken 140 times.
✓ Branch 1 taken 7 times.
|
147 | for (std::size_t i = 0; i < T; ++i) { |
556 |
2/4✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 140 times.
✗ Branch 7 not taken.
|
140 | xs[i] = model->get_state()->rand(); |
557 |
4/8✓ Branch 3 taken 140 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 140 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 140 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 140 times.
✗ Branch 14 not taken.
|
140 | xs[i].tail(model->get_state()->get_nv()) *= 0; |
558 |
3/6✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 140 times.
✗ Branch 10 not taken.
|
140 | us[i] = Eigen::VectorXd::Zero(model->get_nu()); |
559 | } | ||
560 | |||
561 | // check the state and cost in each node | ||
562 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | problem1.quasiStatic(us, xs); |
563 |
2/2✓ Branch 0 taken 140 times.
✓ Branch 1 taken 7 times.
|
147 | for (std::size_t i = 0; i < T; ++i) { |
564 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
565 |
1/2✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
|
140 | model->createData(); |
566 |
3/6✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 140 times.
✗ Branch 9 not taken.
|
140 | Eigen::VectorXd u = Eigen::VectorXd::Zero(model->get_nu()); |
567 |
3/6✓ Branch 3 taken 140 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 140 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 140 times.
✗ Branch 10 not taken.
|
140 | model->quasiStatic(data, u, xs[i]); |
568 |
8/16✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 140 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 140 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 140 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 140 times.
|
140 | BOOST_CHECK((u - us[i]).isZero(1e-7)); |
569 | 140 | } | |
570 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | problem2.quasiStatic(us, xs); |
571 |
2/2✓ Branch 0 taken 140 times.
✓ Branch 1 taken 7 times.
|
147 | for (std::size_t i = 0; i < T; ++i) { |
572 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
573 |
1/2✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
|
140 | model->createData(); |
574 |
3/6✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 140 times.
✗ Branch 9 not taken.
|
140 | Eigen::VectorXd u = Eigen::VectorXd::Zero(model->get_nu()); |
575 |
3/6✓ Branch 3 taken 140 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 140 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 140 times.
✗ Branch 10 not taken.
|
140 | model->quasiStatic(data, u, xs[i]); |
576 |
8/16✓ Branch 1 taken 140 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 140 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 140 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 140 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 140 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 140 times.
|
140 | BOOST_CHECK((u - us[i]).isZero(1e-7)); |
577 | 140 | } | |
578 | 7 | } | |
579 | |||
580 | 92 | void test_quasiStatic_diffAction( | |
581 | DifferentialActionModelTypes::Type action_model_type, | ||
582 | IntegratorTypes::Type integrator_type) { | ||
583 | // create the model | ||
584 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | DifferentialActionModelFactory factory; |
585 | const std::shared_ptr<crocoddyl::DifferentialActionModelAbstract>& diffModel = | ||
586 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | factory.create(action_model_type); |
587 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | IntegratorFactory factory_int; |
588 | const std::shared_ptr<crocoddyl::ActionModelAbstract>& model = | ||
589 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | factory_int.create(integrator_type, diffModel); |
590 | |||
591 | // create two shooting problems (with and without data allocation) | ||
592 | 92 | std::size_t T = 20; | |
593 |
2/4✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 92 times.
✗ Branch 7 not taken.
|
92 | const Eigen::VectorXd& x0 = model->get_state()->rand(); |
594 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<std::shared_ptr<crocoddyl::ActionModelAbstract>> models(T, model); |
595 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<std::shared_ptr<crocoddyl::ActionDataAbstract>> datas(T); |
596 |
2/2✓ Branch 0 taken 1840 times.
✓ Branch 1 taken 92 times.
|
1932 | for (std::size_t i = 0; i < T; ++i) { |
597 |
1/2✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
|
1840 | datas[i] = model->createData(); |
598 | } | ||
599 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | crocoddyl::ShootingProblem problem1(x0, models, model); |
600 | crocoddyl::ShootingProblem problem2(x0, models, model, datas, | ||
601 |
2/4✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 92 times.
✗ Branch 7 not taken.
|
184 | model->createData()); |
602 | |||
603 | // create random trajectory | ||
604 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<Eigen::VectorXd> xs(T); |
605 |
1/2✓ Branch 2 taken 92 times.
✗ Branch 3 not taken.
|
92 | std::vector<Eigen::VectorXd> us(T); |
606 |
2/2✓ Branch 0 taken 1840 times.
✓ Branch 1 taken 92 times.
|
1932 | for (std::size_t i = 0; i < T; ++i) { |
607 |
2/4✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1840 times.
✗ Branch 7 not taken.
|
1840 | xs[i] = model->get_state()->rand(); |
608 |
4/8✓ Branch 3 taken 1840 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 1840 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1840 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1840 times.
✗ Branch 14 not taken.
|
1840 | xs[i].tail(model->get_state()->get_nv()) *= 0; |
609 |
3/6✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1840 times.
✗ Branch 10 not taken.
|
1840 | us[i] = Eigen::VectorXd::Zero(model->get_nu()); |
610 | } | ||
611 | |||
612 | // check the state and cost in each node | ||
613 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | problem1.quasiStatic(us, xs); |
614 |
2/2✓ Branch 0 taken 1840 times.
✓ Branch 1 taken 92 times.
|
1932 | for (std::size_t i = 0; i < T; ++i) { |
615 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
616 |
1/2✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
|
1840 | model->createData(); |
617 |
3/6✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1840 times.
✗ Branch 9 not taken.
|
1840 | Eigen::VectorXd u = Eigen::VectorXd::Zero(model->get_nu()); |
618 |
3/6✓ Branch 3 taken 1840 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1840 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1840 times.
✗ Branch 10 not taken.
|
1840 | model->quasiStatic(data, u, xs[i]); |
619 |
8/16✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1840 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1840 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1840 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1840 times.
|
1840 | BOOST_CHECK((u - us[i]).isZero(1e-7)); |
620 | 1840 | } | |
621 |
1/2✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
|
92 | problem2.quasiStatic(us, xs); |
622 |
2/2✓ Branch 0 taken 1840 times.
✓ Branch 1 taken 92 times.
|
1932 | for (std::size_t i = 0; i < T; ++i) { |
623 | const std::shared_ptr<crocoddyl::ActionDataAbstract>& data = | ||
624 |
1/2✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
|
1840 | model->createData(); |
625 |
3/6✓ Branch 2 taken 1840 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1840 times.
✗ Branch 9 not taken.
|
1840 | Eigen::VectorXd u = Eigen::VectorXd::Zero(model->get_nu()); |
626 |
3/6✓ Branch 3 taken 1840 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1840 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1840 times.
✗ Branch 10 not taken.
|
1840 | model->quasiStatic(data, u, xs[i]); |
627 |
8/16✓ Branch 1 taken 1840 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1840 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1840 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1840 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1840 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1840 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1840 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1840 times.
|
1840 | BOOST_CHECK((u - us[i]).isZero(1e-7)); |
628 | 1840 | } | |
629 | 92 | } | |
630 | |||
631 | //----------------------------------------------------------------------------// | ||
632 | |||
633 | 7 | void register_action_model_unit_tests( | |
634 | ActionModelTypes::Type action_model_type) { | ||
635 |
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; |
636 |
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; |
637 |
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; |
638 |
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()); |
639 |
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(boost::bind(&test_calc, action_model_type))); |
640 |
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(boost::bind(&test_calcDiff, action_model_type))); |
641 |
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(boost::bind(&test_quasiStatic, action_model_type))); |
642 |
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(boost::bind(&test_rollout, action_model_type))); |
643 |
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); |
644 | 7 | } | |
645 | |||
646 | 92 | void register_diff_action_model_unit_tests( | |
647 | DifferentialActionModelTypes::Type action_model_type, | ||
648 | IntegratorTypes::Type integrator_type) { | ||
649 |
2/4✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 92 times.
✗ Branch 5 not taken.
|
92 | boost::test_tools::output_test_stream test_name; |
650 |
4/8✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 92 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 92 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 92 times.
✗ Branch 11 not taken.
|
92 | test_name << "test_" << action_model_type << "_" << integrator_type; |
651 |
4/8✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 92 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 92 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 92 times.
✗ Branch 11 not taken.
|
92 | std::cout << "Running " << test_name.str() << std::endl; |
652 |
4/8✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 92 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
|
92 | test_suite* ts = BOOST_TEST_SUITE(test_name.str()); |
653 |
5/10✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 92 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 92 times.
✗ Branch 15 not taken.
|
92 | ts->add(BOOST_TEST_CASE( |
654 | boost::bind(&test_calc_diffAction, action_model_type, integrator_type))); | ||
655 |
5/10✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 92 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 92 times.
✗ Branch 15 not taken.
|
92 | ts->add(BOOST_TEST_CASE(boost::bind(&test_calcDiff_diffAction, |
656 | action_model_type, integrator_type))); | ||
657 |
5/10✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 92 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 92 times.
✗ Branch 15 not taken.
|
92 | ts->add(BOOST_TEST_CASE(boost::bind(&test_quasiStatic_diffAction, |
658 | action_model_type, integrator_type))); | ||
659 |
5/10✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 92 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 92 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 92 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 92 times.
✗ Branch 15 not taken.
|
92 | ts->add(BOOST_TEST_CASE(boost::bind(&test_rollout_diffAction, |
660 | action_model_type, integrator_type))); | ||
661 |
3/6✓ Branch 1 taken 92 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 92 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 92 times.
✗ Branch 7 not taken.
|
92 | framework::master_test_suite().add(ts); |
662 | 92 | } | |
663 | |||
664 | 1 | bool init_function() { | |
665 |
2/2✓ Branch 1 taken 7 times.
✓ Branch 2 taken 1 times.
|
8 | for (size_t i = 0; i < ActionModelTypes::all.size(); ++i) { |
666 | 7 | register_action_model_unit_tests(ActionModelTypes::all[i]); | |
667 | } | ||
668 |
2/2✓ Branch 1 taken 23 times.
✓ Branch 2 taken 1 times.
|
24 | for (size_t i = 0; i < DifferentialActionModelTypes::all.size(); ++i) { |
669 |
2/2✓ Branch 1 taken 92 times.
✓ Branch 2 taken 23 times.
|
115 | for (size_t j = 0; j < IntegratorTypes::all.size(); ++j) { |
670 | 92 | register_diff_action_model_unit_tests( | |
671 | 92 | DifferentialActionModelTypes::all[i], IntegratorTypes::all[j]); | |
672 | } | ||
673 | } | ||
674 | 1 | return true; | |
675 | } | ||
676 | |||
677 | 1 | int main(int argc, char** argv) { | |
678 | 1 | return ::boost::unit_test::unit_test_main(&init_function, argc, argv); | |
679 | } | ||
680 |