GCC Code Coverage Report


Directory: ./
File: unittest/test_cost_sum.cpp
Date: 2025-03-26 19:23:43
Exec Total Coverage
Lines: 300 300 100.0%
Branches: 696 1368 50.9%

Line Branch Exec Source
1 ///////////////////////////////////////////////////////////////////////////////
2 // BSD 3-Clause License
3 //
4 // Copyright (C) 2019-2025, University of Edinburgh, Heriot-Watt University
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/actions/lqr.hpp"
13 #include "crocoddyl/core/utils/conversions.hpp"
14 #include "crocoddyl/multibody/data/multibody.hpp"
15 #include "factory/cost.hpp"
16 #include "unittest_common.hpp"
17
18 using namespace boost::unit_test;
19 using namespace crocoddyl::unittest;
20
21 //----------------------------------------------------------------------------//
22
23 3 void test_constructor(StateModelTypes::Type state_type) {
24 // Setup the test
25
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 StateModelFactory state_factory;
26
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::CostModelSum model(state_factory.create(state_type));
27
28 // Run the print function
29
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 std::ostringstream tmp;
30
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 tmp << model;
31
32 // Test the initial size of the map
33
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(model.get_costs().size() == 0);
34
35 // Checking that casted computation is the same
36 #ifdef NDEBUG // Run only in release mode
37 crocoddyl::CostModelSumTpl<float> casted_model = model.cast<float>();
38 BOOST_CHECK(casted_model.get_costs().size() == 0);
39 #endif
40 3 }
41
42 3 void test_addCost(StateModelTypes::Type state_type) {
43 // Setup the test
44
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 StateModelFactory state_factory;
45
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::CostModelSum model(state_factory.create(state_type));
46
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 crocoddyl::CostModelSumTpl<float> casted_model = model.cast<float>();
47
48 // add an active cost
49 std::shared_ptr<crocoddyl::CostModelAbstract> rand_cost_1 =
50
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 create_random_cost(state_type);
51
2/4
✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
3 model.addCost("random_cost_1", rand_cost_1, 1.);
52
9/18
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 3 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 3 times.
3 BOOST_CHECK(model.get_nr() == rand_cost_1->get_activation()->get_nr());
53
9/18
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 3 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 3 times.
3 BOOST_CHECK(model.get_nr_total() == rand_cost_1->get_activation()->get_nr());
54
55 // add an inactive cost
56 std::shared_ptr<crocoddyl::CostModelAbstract> rand_cost_2 =
57
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 create_random_cost(state_type);
58
2/4
✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
3 model.addCost("random_cost_2", rand_cost_2, 1., false);
59
9/18
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 3 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 3 times.
3 BOOST_CHECK(model.get_nr() == rand_cost_1->get_activation()->get_nr());
60
11/22
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
✓ Branch 30 taken 3 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 3 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 3 times.
✗ Branch 37 not taken.
✗ Branch 41 not taken.
✓ Branch 42 taken 3 times.
3 BOOST_CHECK(model.get_nr_total() ==
61 rand_cost_1->get_activation()->get_nr() +
62 rand_cost_2->get_activation()->get_nr());
63
64 // change the random cost 2 status
65
2/4
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 model.changeCostStatus("random_cost_2", true);
66
11/22
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
✓ Branch 30 taken 3 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 3 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 3 times.
✗ Branch 37 not taken.
✗ Branch 41 not taken.
✓ Branch 42 taken 3 times.
3 BOOST_CHECK(model.get_nr() == rand_cost_1->get_activation()->get_nr() +
67 rand_cost_2->get_activation()->get_nr());
68
11/22
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
✓ Branch 30 taken 3 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 3 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 3 times.
✗ Branch 37 not taken.
✗ Branch 41 not taken.
✓ Branch 42 taken 3 times.
3 BOOST_CHECK(model.get_nr_total() ==
69 rand_cost_1->get_activation()->get_nr() +
70 rand_cost_2->get_activation()->get_nr());
71
72 // change the random cost 1 status
73
2/4
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 model.changeCostStatus("random_cost_1", false);
74
9/18
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 3 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 3 times.
3 BOOST_CHECK(model.get_nr() == rand_cost_2->get_activation()->get_nr());
75
11/22
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
✓ Branch 30 taken 3 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 3 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 3 times.
✗ Branch 37 not taken.
✗ Branch 41 not taken.
✓ Branch 42 taken 3 times.
3 BOOST_CHECK(model.get_nr_total() ==
76 rand_cost_1->get_activation()->get_nr() +
77 rand_cost_2->get_activation()->get_nr());
78
79 // Checking that casted computation is the same
80 #ifdef NDEBUG // Run only in release mode
81 std::shared_ptr<crocoddyl::CostModelAbstractTpl<float>> casted_rand_cost_1 =
82 rand_cost_1->cast<float>();
83 casted_model.addCost("random_cost_1", casted_rand_cost_1, 1.f);
84 BOOST_CHECK(casted_model.get_nr() ==
85 casted_rand_cost_1->get_activation()->get_nr());
86 BOOST_CHECK(casted_model.get_nr_total() ==
87 casted_rand_cost_1->get_activation()->get_nr());
88 std::shared_ptr<crocoddyl::CostModelAbstractTpl<float>> casted_rand_cost_2 =
89 rand_cost_2->cast<float>();
90 casted_model.addCost("random_cost_2", casted_rand_cost_2, 1.f, false);
91 BOOST_CHECK(casted_model.get_nr() ==
92 casted_rand_cost_1->get_activation()->get_nr());
93 BOOST_CHECK(casted_model.get_nr_total() ==
94 casted_rand_cost_1->get_activation()->get_nr() +
95 casted_rand_cost_2->get_activation()->get_nr());
96 casted_model.changeCostStatus("random_cost_2", true);
97 BOOST_CHECK(casted_model.get_nr() ==
98 casted_rand_cost_1->get_activation()->get_nr() +
99 casted_rand_cost_2->get_activation()->get_nr());
100 BOOST_CHECK(casted_model.get_nr_total() ==
101 casted_rand_cost_1->get_activation()->get_nr() +
102 casted_rand_cost_2->get_activation()->get_nr());
103 casted_model.changeCostStatus("random_cost_1", false);
104 BOOST_CHECK(casted_model.get_nr() ==
105 casted_rand_cost_2->get_activation()->get_nr());
106 BOOST_CHECK(casted_model.get_nr_total() ==
107 casted_rand_cost_1->get_activation()->get_nr() +
108 casted_rand_cost_2->get_activation()->get_nr());
109 #endif
110 3 }
111
112 3 void test_addCost_error_message(StateModelTypes::Type state_type) {
113 // Setup the test
114
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 StateModelFactory state_factory;
115
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::CostModelSum model(state_factory.create(state_type));
116
117 // create an cost object
118 std::shared_ptr<crocoddyl::CostModelAbstract> rand_cost =
119
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 create_random_cost(state_type);
120
121 // add twice the same cost object to the container
122
2/4
✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
3 model.addCost("random_cost", rand_cost, 1.);
123
124 // test error message when we add a duplicate cost
125
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 CaptureIOStream capture_ios;
126
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 capture_ios.beginCapture();
127
2/4
✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
3 model.addCost("random_cost", rand_cost, 1.);
128
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 capture_ios.endCapture();
129
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 std::stringstream expected_buffer;
130 expected_buffer << "Warning: we couldn't add the random_cost cost item, it "
131
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 "already existed."
132
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 << std::endl;
133
8/16
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 3 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 3 times.
✗ Branch 25 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 3 times.
3 BOOST_CHECK(capture_ios.str() == expected_buffer.str());
134
135 // test error message when we change the cost status of an inexistent cost
136
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 capture_ios.beginCapture();
137
2/4
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 model.changeCostStatus("no_exist_cost", true);
138
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 capture_ios.endCapture();
139
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 expected_buffer.clear();
140 expected_buffer << "Warning: we couldn't change the status of the "
141
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 "no_exist_cost cost item, it doesn't exist."
142
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 << std::endl;
143
8/16
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 3 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 3 times.
✗ Branch 25 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 3 times.
3 BOOST_CHECK(capture_ios.str() == expected_buffer.str());
144 3 }
145
146 3 void test_removeCost(StateModelTypes::Type state_type) {
147 // Setup the test
148
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 StateModelFactory state_factory;
149
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::CostModelSum model(state_factory.create(state_type));
150
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 crocoddyl::CostModelSumTpl<float> casted_model = model.cast<float>();
151
152 // add an active cost
153 std::shared_ptr<crocoddyl::CostModelAbstract> rand_cost =
154
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 create_random_cost(state_type);
155
2/4
✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
3 model.addCost("random_cost", rand_cost, 1.);
156
9/18
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 3 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 3 times.
3 BOOST_CHECK(model.get_nr() == rand_cost->get_activation()->get_nr());
157
158 // remove the cost
159
2/4
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 model.removeCost("random_cost");
160
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 3 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 3 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 3 times.
3 BOOST_CHECK(model.get_nr() == 0);
161
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 3 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 3 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 3 times.
3 BOOST_CHECK(model.get_nr_total() == 0);
162
163 // Checking that casted computation is the same
164 #ifdef NDEBUG // Run only in release mode
165 std::shared_ptr<crocoddyl::CostModelAbstractTpl<float>> casted_rand_cost =
166 rand_cost->cast<float>();
167 casted_model.addCost("random_cost", casted_rand_cost, 1.f);
168 BOOST_CHECK(casted_model.get_nr() ==
169 casted_rand_cost->get_activation()->get_nr());
170 casted_model.removeCost("random_cost");
171 BOOST_CHECK(casted_model.get_nr() == 0);
172 BOOST_CHECK(casted_model.get_nr_total() == 0);
173 #endif
174 3 }
175
176 3 void test_removeCost_error_message(StateModelTypes::Type state_type) {
177 // Setup the test
178
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 StateModelFactory state_factory;
179
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::CostModelSum model(state_factory.create(state_type));
180
181 // remove a none existing cost form the container, we expect a cout message
182 // here
183
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 CaptureIOStream capture_ios;
184
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 capture_ios.beginCapture();
185
2/4
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 model.removeCost("random_cost");
186
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 capture_ios.endCapture();
187
188 // Test that the error message is sent.
189
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 std::stringstream expected_buffer;
190 expected_buffer << "Warning: we couldn't remove the random_cost cost item, "
191
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 "it doesn't exist."
192
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 << std::endl;
193
8/16
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 3 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 3 times.
✗ Branch 25 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 3 times.
3 BOOST_CHECK(capture_ios.str() == expected_buffer.str());
194 3 }
195
196 3 void test_calc(StateModelTypes::Type state_type) {
197 // setup the test
198
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 StateModelFactory state_factory;
199
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::CostModelSum model(state_factory.create(state_type));
200 // create the corresponding data object
201 const std::shared_ptr<crocoddyl::StateMultibody>& state =
202
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 std::static_pointer_cast<crocoddyl::StateMultibody>(model.get_state());
203
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 pinocchio::Model& pinocchio_model = *state->get_pinocchio().get();
204
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 pinocchio::Data pinocchio_data(pinocchio_model);
205
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 crocoddyl::DataCollectorMultibody shared_data(&pinocchio_data);
206
207 // create and add some cost objects
208 3 std::vector<std::shared_ptr<crocoddyl::CostModelAbstract>> models;
209 3 std::vector<std::shared_ptr<crocoddyl::CostDataAbstract>> datas;
210
2/2
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 3 times.
18 for (std::size_t i = 0; i < 5; ++i) {
211
1/2
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
15 std::ostringstream os;
212
2/4
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 os << "random_cost_" << i;
213 const std::shared_ptr<crocoddyl::CostModelAbstract>& m =
214
1/2
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
15 create_random_cost(state_type);
215
2/4
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 15 times.
✗ Branch 6 not taken.
15 model.addCost(os.str(), m, 1.);
216
1/2
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
15 models.push_back(m);
217
2/4
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 15 times.
✗ Branch 6 not taken.
15 datas.push_back(m->createData(&shared_data));
218 15 }
219
220 // create the data of the cost sum
221 const std::shared_ptr<crocoddyl::CostDataSum>& data =
222
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 model.createData(&shared_data);
223
224 // compute the cost sum data for the case when all costs are defined as active
225
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 const Eigen::VectorXd x1 = state->rand();
226
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
3 const Eigen::VectorXd u1 = Eigen::VectorXd::Random(model.get_nu());
227
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::unittest::updateAllPinocchio(&pinocchio_model, &pinocchio_data,
228 x1);
229
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
3 model.calc(data, x1, u1);
230
231 // check that the cost has been filled
232
6/12
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 3 times.
3 BOOST_CHECK(data->cost > 0.);
233
234 // check the cost against single cost computations
235 3 double cost = 0;
236
2/2
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 3 times.
18 for (std::size_t i = 0; i < 5; ++i) {
237
3/6
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 15 times.
✗ Branch 11 not taken.
15 models[i]->calc(datas[i], x1, u1);
238 15 cost += datas[i]->cost;
239 }
240
6/12
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 3 times.
3 BOOST_CHECK(data->cost == cost);
241
242 // compute the cost sum data for the case when the first three costs are
243 // defined as active
244
2/4
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 model.changeCostStatus("random_cost_3", false);
245
2/4
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 model.changeCostStatus("random_cost_4", false);
246
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 const Eigen::VectorXd x2 = state->rand();
247
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
3 const Eigen::VectorXd u2 = Eigen::VectorXd::Random(model.get_nu());
248
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::unittest::updateAllPinocchio(&pinocchio_model, &pinocchio_data,
249 x1);
250
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
3 model.calc(data, x2, u2);
251 3 cost = 0;
252
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 3 times.
12 for (std::size_t i = 0; i < 3;
253 ++i) { // we need to update data because this costs are active
254
3/6
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 9 times.
✗ Branch 11 not taken.
9 models[i]->calc(datas[i], x2, u2);
255 9 cost += datas[i]->cost;
256 }
257
6/12
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 3 times.
3 BOOST_CHECK(data->cost == cost);
258
259 // Checking that casted computation is the same
260 #ifdef NDEBUG // Run only in release mode
261 model.changeCostStatus("random_cost_3", true);
262 model.changeCostStatus("random_cost_4", true);
263 crocoddyl::CostModelSumTpl<float> casted_model = model.cast<float>();
264 const std::shared_ptr<crocoddyl::StateMultibodyTpl<float>>& casted_state =
265 std::static_pointer_cast<crocoddyl::StateMultibodyTpl<float>>(
266 casted_model.get_state());
267 pinocchio::ModelTpl<float>& casted_pinocchio_model =
268 *casted_state->get_pinocchio().get();
269 pinocchio::DataTpl<float> casted_pinocchio_data(casted_pinocchio_model);
270 crocoddyl::DataCollectorMultibodyTpl<float> casted_shared_data(
271 &casted_pinocchio_data);
272 std::vector<std::shared_ptr<crocoddyl::CostModelAbstractTpl<float>>>
273 casted_models;
274 std::vector<std::shared_ptr<crocoddyl::CostDataAbstractTpl<float>>>
275 casted_datas;
276 for (std::size_t i = 0; i < 5; ++i) {
277 casted_models.push_back(models[i]->cast<float>());
278 casted_datas.push_back(casted_models[i]->createData(&casted_shared_data));
279 }
280 const std::shared_ptr<crocoddyl::CostDataSumTpl<float>>& casted_data =
281 casted_model.createData(&casted_shared_data);
282 const Eigen::VectorXf x1_f = x1.cast<float>();
283 const Eigen::VectorXf u1_f = u1.cast<float>();
284 crocoddyl::unittest::updateAllPinocchio(&pinocchio_model, &pinocchio_data,
285 x1);
286 crocoddyl::unittest::updateAllPinocchio(&casted_pinocchio_model,
287 &casted_pinocchio_data, x1_f);
288 model.calc(data, x1, u1);
289 casted_model.calc(casted_data, x1_f, u1_f);
290 BOOST_CHECK(casted_data->cost > 0.f);
291 float tol_f = std::sqrt(2.0f * std::numeric_limits<float>::epsilon());
292 BOOST_CHECK(std::abs(float(data->cost) - casted_data->cost) <= tol_f);
293 float cost_f = 0.f;
294 for (std::size_t i = 0; i < 5; ++i) {
295 casted_models[i]->calc(casted_datas[i], x1_f, u1_f);
296 cost_f += casted_datas[i]->cost;
297 }
298 BOOST_CHECK(casted_data->cost == cost_f);
299 #endif
300 3 }
301
302 3 void test_calcDiff(StateModelTypes::Type state_type) {
303 // setup the test
304
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 StateModelFactory state_factory;
305
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::CostModelSum model(state_factory.create(state_type));
306 // create the corresponding data object
307 const std::shared_ptr<crocoddyl::StateMultibody>& state =
308
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 std::static_pointer_cast<crocoddyl::StateMultibody>(model.get_state());
309
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 pinocchio::Model& pinocchio_model = *state->get_pinocchio().get();
310
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 pinocchio::Data pinocchio_data(pinocchio_model);
311
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 crocoddyl::DataCollectorMultibody shared_data(&pinocchio_data);
312
313 // create and add some cost objects
314 3 std::vector<std::shared_ptr<crocoddyl::CostModelAbstract>> models;
315 3 std::vector<std::shared_ptr<crocoddyl::CostDataAbstract>> datas;
316
2/2
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 3 times.
18 for (std::size_t i = 0; i < 5; ++i) {
317
1/2
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
15 std::ostringstream os;
318
2/4
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 os << "random_cost_" << i;
319 const std::shared_ptr<crocoddyl::CostModelAbstract>& m =
320
1/2
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
15 create_random_cost(state_type);
321
2/4
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 15 times.
✗ Branch 6 not taken.
15 model.addCost(os.str(), m, 1.);
322
1/2
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
15 models.push_back(m);
323
2/4
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 15 times.
✗ Branch 6 not taken.
15 datas.push_back(m->createData(&shared_data));
324 15 }
325
326 // create the data of the cost sum
327 const std::shared_ptr<crocoddyl::CostDataSum>& data =
328
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 model.createData(&shared_data);
329
330 // compute the cost sum data for the case when all costs are defined as active
331
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 Eigen::VectorXd x1 = state->rand();
332
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
3 const Eigen::VectorXd u1 = Eigen::VectorXd::Random(model.get_nu());
333
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::unittest::updateAllPinocchio(&pinocchio_model, &pinocchio_data,
334 x1);
335
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
3 model.calc(data, x1, u1);
336
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
3 model.calcDiff(data, x1, u1);
337
338 // check that the cost has been filled
339
6/12
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 3 times.
3 BOOST_CHECK(data->cost > 0.);
340
341 // check the cost against single cost computations
342 3 double cost = 0;
343
3/6
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
3 Eigen::VectorXd Lx = Eigen::VectorXd::Zero(state->get_ndx());
344
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
3 Eigen::VectorXd Lu = Eigen::VectorXd::Zero(model.get_nu());
345 Eigen::MatrixXd Lxx =
346
4/8
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
3 Eigen::MatrixXd::Zero(state->get_ndx(), state->get_ndx());
347
4/8
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
3 Eigen::MatrixXd Lxu = Eigen::MatrixXd::Zero(state->get_ndx(), model.get_nu());
348
4/8
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 11 not taken.
3 Eigen::MatrixXd Luu = Eigen::MatrixXd::Zero(model.get_nu(), model.get_nu());
349
2/2
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 3 times.
18 for (std::size_t i = 0; i < 5; ++i) {
350
3/6
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 15 times.
✗ Branch 11 not taken.
15 models[i]->calc(datas[i], x1, u1);
351
3/6
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 15 times.
✗ Branch 11 not taken.
15 models[i]->calcDiff(datas[i], x1, u1);
352 15 cost += datas[i]->cost;
353
1/2
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
15 Lx += datas[i]->Lx;
354
1/2
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
15 Lu += datas[i]->Lu;
355
1/2
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
15 Lxx += datas[i]->Lxx;
356
1/2
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
15 Lxu += datas[i]->Lxu;
357
1/2
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
15 Luu += datas[i]->Luu;
358 }
359
6/12
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 3 times.
3 BOOST_CHECK(data->cost == cost);
360
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(data->Lx == Lx);
361
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(data->Lu == Lu);
362
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(data->Lxx == Lxx);
363
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(data->Lxu == Lxu);
364
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(data->Luu == Luu);
365
366
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 x1 = state->rand();
367
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::unittest::updateAllPinocchio(&pinocchio_model, &pinocchio_data,
368 x1);
369
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 model.calc(data, x1);
370
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 model.calcDiff(data, x1);
371 3 cost = 0.;
372
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 Lx.setZero();
373
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 Lxx.setZero();
374
2/2
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 3 times.
18 for (std::size_t i = 0; i < 5; ++i) {
375
2/4
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 8 not taken.
15 models[i]->calc(datas[i], x1);
376
2/4
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 8 not taken.
15 models[i]->calcDiff(datas[i], x1);
377 15 cost += datas[i]->cost;
378
1/2
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
15 Lx += datas[i]->Lx;
379
1/2
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
15 Lxx += datas[i]->Lxx;
380 }
381
6/12
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 3 times.
3 BOOST_CHECK(data->cost == cost);
382
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(data->Lx == Lx);
383
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(data->Lxx == Lxx);
384
385 // compute the cost sum data for the case when the first three costs are
386 // defined as active
387
2/4
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 model.changeCostStatus("random_cost_3", false);
388
2/4
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 model.changeCostStatus("random_cost_4", false);
389
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 Eigen::VectorXd x2 = state->rand();
390
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
3 const Eigen::VectorXd u2 = Eigen::VectorXd::Random(model.get_nu());
391
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::unittest::updateAllPinocchio(&pinocchio_model, &pinocchio_data,
392 x2);
393
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
3 model.calc(data, x2, u2);
394
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
3 model.calcDiff(data, x2, u2);
395 3 cost = 0;
396
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 Lx.setZero();
397
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 Lu.setZero();
398
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 Lxx.setZero();
399
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 Lxu.setZero();
400
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 Luu.setZero();
401
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 3 times.
12 for (std::size_t i = 0; i < 3;
402 ++i) { // we need to update data because this costs are active
403
3/6
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 9 times.
✗ Branch 11 not taken.
9 models[i]->calc(datas[i], x2, u2);
404
3/6
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 9 times.
✗ Branch 11 not taken.
9 models[i]->calcDiff(datas[i], x2, u2);
405 9 cost += datas[i]->cost;
406
1/2
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
9 Lx += datas[i]->Lx;
407
1/2
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
9 Lu += datas[i]->Lu;
408
1/2
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
9 Lxx += datas[i]->Lxx;
409
1/2
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
9 Lxu += datas[i]->Lxu;
410
1/2
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
9 Luu += datas[i]->Luu;
411 }
412
6/12
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 3 times.
3 BOOST_CHECK(data->cost == cost);
413
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(data->Lx == Lx);
414
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(data->Lu == Lu);
415
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(data->Lxx == Lxx);
416
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(data->Lxu == Lxu);
417
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(data->Luu == Luu);
418
419
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 x2 = state->rand();
420
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::unittest::updateAllPinocchio(&pinocchio_model, &pinocchio_data,
421 x2);
422
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 model.calc(data, x2);
423
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 model.calcDiff(data, x2);
424 3 cost = 0.;
425
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 Lx.setZero();
426
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 Lxx.setZero();
427
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 3 times.
12 for (std::size_t i = 0; i < 3; ++i) {
428
2/4
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 9 times.
✗ Branch 8 not taken.
9 models[i]->calc(datas[i], x2);
429
2/4
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 9 times.
✗ Branch 8 not taken.
9 models[i]->calcDiff(datas[i], x2);
430 9 cost += datas[i]->cost;
431
1/2
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
9 Lx += datas[i]->Lx;
432
1/2
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
9 Lxx += datas[i]->Lxx;
433 }
434
6/12
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 3 times.
3 BOOST_CHECK(data->cost == cost);
435
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(data->Lx == Lx);
436
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 3 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
3 BOOST_CHECK(data->Lxx == Lxx);
437
438 // Checking that casted computation is the same
439 #ifdef NDEBUG // Run only in release mode
440 model.changeCostStatus("random_cost_3", true);
441 model.changeCostStatus("random_cost_4", true);
442 crocoddyl::CostModelSumTpl<float> casted_model = model.cast<float>();
443 const std::shared_ptr<crocoddyl::StateMultibodyTpl<float>>& casted_state =
444 std::static_pointer_cast<crocoddyl::StateMultibodyTpl<float>>(
445 casted_model.get_state());
446 pinocchio::ModelTpl<float>& casted_pinocchio_model =
447 *casted_state->get_pinocchio().get();
448 pinocchio::DataTpl<float> casted_pinocchio_data(casted_pinocchio_model);
449 crocoddyl::DataCollectorMultibodyTpl<float> casted_shared_data(
450 &casted_pinocchio_data);
451 std::vector<std::shared_ptr<crocoddyl::CostModelAbstractTpl<float>>>
452 casted_models;
453 std::vector<std::shared_ptr<crocoddyl::CostDataAbstractTpl<float>>>
454 casted_datas;
455 for (std::size_t i = 0; i < 5; ++i) {
456 casted_models.push_back(models[i]->cast<float>());
457 casted_datas.push_back(casted_models[i]->createData(&casted_shared_data));
458 }
459 const std::shared_ptr<crocoddyl::CostDataSumTpl<float>>& casted_data =
460 casted_model.createData(&casted_shared_data);
461 const Eigen::VectorXf x1_f = x1.cast<float>();
462 const Eigen::VectorXf u1_f = u1.cast<float>();
463 crocoddyl::unittest::updateAllPinocchio(&pinocchio_model, &pinocchio_data,
464 x1);
465 crocoddyl::unittest::updateAllPinocchio(&casted_pinocchio_model,
466 &casted_pinocchio_data, x1_f);
467 model.calc(data, x1, u1);
468 model.calcDiff(data, x1, u1);
469 casted_model.calc(casted_data, x1_f, u1_f);
470 casted_model.calcDiff(casted_data, x1_f, u1_f);
471 Lx.setZero();
472 Lu.setZero();
473 Lxx.setZero();
474 Lxu.setZero();
475 Luu.setZero();
476 float cost_f = 0.f;
477 Eigen::VectorXf Lx_f = Lx.cast<float>();
478 Eigen::VectorXf Lu_f = Lu.cast<float>();
479 Eigen::MatrixXf Lxx_f = Lxx.cast<float>();
480 Eigen::MatrixXf Lxu_f = Lxu.cast<float>();
481 Eigen::MatrixXf Luu_f = Luu.cast<float>();
482 for (std::size_t i = 0; i < 5;
483 ++i) { // we need to update data because this costs are active
484 casted_models[i]->calc(casted_datas[i], x1_f, u1_f);
485 casted_models[i]->calcDiff(casted_datas[i], x1_f, u1_f);
486 cost_f += casted_datas[i]->cost;
487 Lx_f += casted_datas[i]->Lx;
488 Lu_f += casted_datas[i]->Lu;
489 Lxx_f += casted_datas[i]->Lxx;
490 Lxu_f += casted_datas[i]->Lxu;
491 Luu_f += casted_datas[i]->Luu;
492 }
493 BOOST_CHECK(casted_data->cost == cost_f);
494 BOOST_CHECK(casted_data->Lx == Lx_f);
495 BOOST_CHECK(casted_data->Lu == Lu_f);
496 BOOST_CHECK(casted_data->Lxx == Lxx_f);
497 BOOST_CHECK(casted_data->Lxu == Lxu_f);
498 BOOST_CHECK(casted_data->Luu == Luu_f);
499 #endif
500 3 }
501
502 3 void test_get_costs(StateModelTypes::Type state_type) {
503 // setup the test
504
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 StateModelFactory state_factory;
505
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::CostModelSum model(state_factory.create(state_type));
506 // create the corresponding data object
507 const std::shared_ptr<crocoddyl::StateMultibody>& state =
508
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 std::static_pointer_cast<crocoddyl::StateMultibody>(model.get_state());
509
2/4
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
3 pinocchio::Data pinocchio_data(*state->get_pinocchio().get());
510
511 // create and add some contact objects
512
2/2
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 3 times.
18 for (unsigned i = 0; i < 5; ++i) {
513
1/2
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
15 std::ostringstream os;
514
2/4
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 os << "random_cost_" << i;
515
3/6
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 15 times.
✗ Branch 9 not taken.
15 model.addCost(os.str(), create_random_cost(state_type), 1.);
516 15 }
517
518 // get the contacts
519
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 const crocoddyl::CostModelSum::CostModelContainer& costs = model.get_costs();
520
521 // test
522 3 crocoddyl::CostModelSum::CostModelContainer::const_iterator it_m, end_m;
523 unsigned i;
524
2/2
✓ Branch 3 taken 15 times.
✓ Branch 4 taken 3 times.
18 for (i = 0, it_m = costs.begin(), end_m = costs.end(); it_m != end_m;
525 15 ++it_m, ++i) {
526
1/2
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
15 std::ostringstream os;
527
2/4
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 os << "random_cost_" << i;
528
7/14
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 15 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 15 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 15 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 15 times.
✗ Branch 23 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 15 times.
15 BOOST_CHECK(it_m->first == os.str());
529 15 }
530 3 }
531
532 3 void test_get_nr(StateModelTypes::Type state_type) {
533 // Setup the test
534
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 StateModelFactory state_factory;
535
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 crocoddyl::CostModelSum model(state_factory.create(state_type));
536
537 // create the corresponding data object
538 const std::shared_ptr<crocoddyl::StateMultibody>& state =
539
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 std::static_pointer_cast<crocoddyl::StateMultibody>(model.get_state());
540
2/4
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
3 pinocchio::Data pinocchio_data(*state->get_pinocchio().get());
541
542 // create and add some contact objects
543
2/2
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 3 times.
18 for (unsigned i = 0; i < 5; ++i) {
544
1/2
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
15 std::ostringstream os;
545
2/4
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 os << "random_cost_" << i;
546
3/6
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 15 times.
✗ Branch 9 not taken.
15 model.addCost(os.str(), create_random_cost(state_type), 1.);
547 15 }
548
549 // compute ni
550 3 std::size_t nr = 0;
551 3 crocoddyl::CostModelSum::CostModelContainer::const_iterator it_m, end_m;
552
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 for (it_m = model.get_costs().begin(), end_m = model.get_costs().end();
553
2/2
✓ Branch 1 taken 15 times.
✓ Branch 2 taken 3 times.
18 it_m != end_m; ++it_m) {
554
2/4
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 15 times.
✗ Branch 9 not taken.
15 nr += it_m->second->cost->get_activation()->get_nr();
555 }
556
557
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 3 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 3 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 3 times.
3 BOOST_CHECK(nr == model.get_nr());
558 3 }
559
560 3 void test_shareMemory(StateModelTypes::Type state_type) {
561 // setup the test
562
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 StateModelFactory state_factory;
563 const std::shared_ptr<crocoddyl::StateAbstract> state =
564
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 state_factory.create(state_type);
565
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 crocoddyl::CostModelSum cost_model(state);
566
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 crocoddyl::DataCollectorAbstract shared_data;
567 const std::shared_ptr<crocoddyl::CostDataSum>& cost_data =
568
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 cost_model.createData(&shared_data);
569
570
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 const std::size_t ndx = state->get_ndx();
571
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 const std::size_t nu = cost_model.get_nu();
572
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 crocoddyl::ActionModelLQR action_model(ndx, nu);
573 const std::shared_ptr<crocoddyl::ActionDataAbstract>& action_data =
574
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 action_model.createData();
575
576
1/2
✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
3 cost_data->shareMemory(action_data.get());
577
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 cost_data->Lx = Eigen::VectorXd::Random(ndx);
578
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 cost_data->Lu = Eigen::VectorXd::Random(nu);
579
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 cost_data->Lxx = Eigen::MatrixXd::Random(ndx, ndx);
580
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 cost_data->Luu = Eigen::MatrixXd::Random(nu, nu);
581
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 cost_data->Lxu = Eigen::MatrixXd::Random(ndx, nu);
582
583 // check that the data has been shared
584
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 3 times.
3 BOOST_CHECK(action_data->Lx.isApprox(cost_data->Lx, 1e-9));
585
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 3 times.
3 BOOST_CHECK(action_data->Lu.isApprox(cost_data->Lu, 1e-9));
586
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 3 times.
3 BOOST_CHECK(action_data->Lxx.isApprox(cost_data->Lxx, 1e-9));
587
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 3 times.
3 BOOST_CHECK(action_data->Luu.isApprox(cost_data->Luu, 1e-9));
588
7/14
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 3 times.
3 BOOST_CHECK(action_data->Lxu.isApprox(cost_data->Lxu, 1e-9));
589 3 }
590
591 //----------------------------------------------------------------------------//
592
593 3 void register_unit_tests(StateModelTypes::Type state_type) {
594
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 boost::test_tools::output_test_stream test_name;
595 test_name << "test_CostModelSum"
596
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
3 << "_" << state_type;
597
4/8
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 11 not taken.
3 std::cout << "Running " << test_name.str() << std::endl;
598
4/8
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
3 test_suite* ts = BOOST_TEST_SUITE(test_name.str());
599
5/10
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
3 ts->add(BOOST_TEST_CASE(boost::bind(&test_constructor, state_type)));
600
5/10
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
3 ts->add(BOOST_TEST_CASE(boost::bind(&test_addCost, state_type)));
601 6 ts->add(
602
5/10
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
3 BOOST_TEST_CASE(boost::bind(&test_addCost_error_message, state_type)));
603
5/10
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
3 ts->add(BOOST_TEST_CASE(boost::bind(&test_removeCost, state_type)));
604 6 ts->add(
605
5/10
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
3 BOOST_TEST_CASE(boost::bind(&test_removeCost_error_message, state_type)));
606
5/10
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
3 ts->add(BOOST_TEST_CASE(boost::bind(&test_calc, state_type)));
607
5/10
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
3 ts->add(BOOST_TEST_CASE(boost::bind(&test_calcDiff, state_type)));
608
5/10
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
3 ts->add(BOOST_TEST_CASE(boost::bind(&test_get_costs, state_type)));
609
5/10
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
3 ts->add(BOOST_TEST_CASE(boost::bind(&test_get_nr, state_type)));
610
5/10
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
3 ts->add(BOOST_TEST_CASE(boost::bind(&test_shareMemory, state_type)));
611
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
3 framework::master_test_suite().add(ts);
612 3 }
613
614 1 bool init_function() {
615 1 register_unit_tests(StateModelTypes::StateMultibody_TalosArm);
616 1 register_unit_tests(StateModelTypes::StateMultibody_HyQ);
617 1 register_unit_tests(StateModelTypes::StateMultibody_Talos);
618 1 return true;
619 }
620
621 1 int main(int argc, char** argv) {
622 1 return ::boost::unit_test::unit_test_main(&init_function, argc, argv);
623 }
624