Directory: | ./ |
---|---|
File: | tests/explicit-constraint-set.cc |
Date: | 2025-05-05 12:19:30 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 347 | 375 | 92.5% |
Branches: | 1047 | 2162 | 48.4% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | // Copyright (c) 2017, Joseph Mirabel | ||
2 | // Authors: Joseph Mirabel (joseph.mirabel@laas.fr) | ||
3 | // | ||
4 | |||
5 | // Redistribution and use in source and binary forms, with or without | ||
6 | // modification, are permitted provided that the following conditions are | ||
7 | // met: | ||
8 | // | ||
9 | // 1. Redistributions of source code must retain the above copyright | ||
10 | // notice, this list of conditions and the following disclaimer. | ||
11 | // | ||
12 | // 2. Redistributions in binary form must reproduce the above copyright | ||
13 | // notice, this list of conditions and the following disclaimer in the | ||
14 | // documentation and/or other materials provided with the distribution. | ||
15 | // | ||
16 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
17 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
18 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
19 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
20 | // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
21 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
22 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
23 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
24 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
25 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
26 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | ||
27 | // DAMAGE. | ||
28 | |||
29 | #define BOOST_TEST_MODULE EXPLICIT_CONSTRAINT_SET | ||
30 | #include <../tests/util.hh> | ||
31 | #include <boost/test/unit_test.hpp> | ||
32 | #include <hpp/constraints/affine-function.hh> | ||
33 | #include <hpp/constraints/explicit-constraint-set.hh> | ||
34 | #include <hpp/constraints/explicit.hh> | ||
35 | #include <hpp/constraints/explicit/relative-pose.hh> | ||
36 | #include <hpp/constraints/generic-transformation.hh> | ||
37 | #include <hpp/constraints/locked-joint.hh> | ||
38 | #include <hpp/constraints/symbolic-calculus.hh> | ||
39 | #include <hpp/pinocchio/configuration.hh> | ||
40 | #include <hpp/pinocchio/device.hh> | ||
41 | #include <hpp/pinocchio/joint.hh> | ||
42 | #include <hpp/pinocchio/liegroup-element.hh> | ||
43 | #include <hpp/pinocchio/liegroup.hh> | ||
44 | #include <hpp/pinocchio/simple-device.hh> | ||
45 | #include <hpp/pinocchio/urdf/util.hh> | ||
46 | #include <pinocchio/algorithm/joint-configuration.hpp> | ||
47 | |||
48 | using Eigen::BlockIndex; | ||
49 | using Eigen::ColBlockIndices; | ||
50 | using Eigen::RowBlockIndices; | ||
51 | |||
52 | using hpp::constraints::AffineFunction; | ||
53 | using hpp::constraints::AffineFunctionPtr_t; | ||
54 | using hpp::constraints::ComparisonTypes_t; | ||
55 | using hpp::constraints::Configuration_t; | ||
56 | using hpp::constraints::Device; | ||
57 | using hpp::constraints::DevicePtr_t; | ||
58 | using hpp::constraints::DifferentiableFunction; | ||
59 | using hpp::constraints::Equality; | ||
60 | using hpp::constraints::EqualToZero; | ||
61 | using hpp::constraints::Explicit; | ||
62 | using hpp::constraints::ExplicitConstraintSet; | ||
63 | using hpp::constraints::ExplicitPtr_t; | ||
64 | using hpp::constraints::JointPtr_t; | ||
65 | using hpp::constraints::LiegroupElement; | ||
66 | using hpp::constraints::LiegroupElementRef; | ||
67 | using hpp::constraints::LiegroupSpace; | ||
68 | using hpp::constraints::LiegroupSpacePtr_t; | ||
69 | using hpp::constraints::LockedJoint; | ||
70 | using hpp::constraints::LockedJointPtr_t; | ||
71 | using hpp::constraints::matrix3_t; | ||
72 | using hpp::constraints::matrix_t; | ||
73 | using hpp::constraints::matrixOut_t; | ||
74 | using hpp::constraints::RelativeTransformation; | ||
75 | using hpp::constraints::RelativeTransformationPtr_t; | ||
76 | using hpp::constraints::segment_t; | ||
77 | using hpp::constraints::segments_t; | ||
78 | using hpp::constraints::size_type; | ||
79 | using hpp::constraints::Transform3s; | ||
80 | using hpp::constraints::value_type; | ||
81 | using hpp::constraints::vector3_t; | ||
82 | using hpp::constraints::vector_t; | ||
83 | using hpp::constraints::vectorIn_t; | ||
84 | using hpp::pinocchio::unittest::HumanoidSimple; | ||
85 | using hpp::pinocchio::unittest::makeDevice; | ||
86 | |||
87 | namespace Eigen { | ||
88 | namespace internal { | ||
89 | ✗ | bool operator==(const empty_struct&, const empty_struct&) { return true; } | |
90 | } // namespace internal | ||
91 | |||
92 | template <bool _allRows, bool _allCols> | ||
93 | 12 | bool operator==(const MatrixBlocks<_allRows, _allCols>& a, | |
94 | const MatrixBlocks<_allRows, _allCols>& b) { | ||
95 | 8 | return (_allRows || a.nbRows() == b.nbRows()) && | |
96 | 12 | (_allCols || a.nbCols() == b.nbCols()) && | |
97 |
2/4✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
|
16 | (_allRows || a.rows() == b.rows()) && |
98 |
1/2✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
|
16 | (_allCols || a.cols() == b.cols()); |
99 | } | ||
100 | } // namespace Eigen | ||
101 | |||
102 | // Explicit expression of variables | ||
103 | // - [idxOut:idxOut+length] with respect to | ||
104 | // - [idxIn:idxIn+length] | ||
105 | class TestFunction : public AffineFunction { | ||
106 | public: | ||
107 | size_type idxIn_, idxOut_, length_; | ||
108 | |||
109 | 2 | TestFunction(size_type idxIn, size_type idxOut, size_type length) | |
110 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
2 | : AffineFunction(matrix_t::Identity(length, length), "TestFunction"), |
111 | 2 | idxIn_(idxIn), | |
112 | 2 | idxOut_(idxOut), | |
113 |
3/6✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
|
4 | length_(length) {} |
114 | |||
115 | // return configuration input interval | ||
116 | 5 | ExplicitConstraintSet::RowBlockIndices inArg() const { | |
117 | 5 | ExplicitConstraintSet::RowBlockIndices ret; | |
118 |
1/2✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
|
5 | ret.addRow(idxIn_, length_); |
119 | 5 | return ret; | |
120 | } | ||
121 | |||
122 | // return configuration output interval | ||
123 | 5 | ExplicitConstraintSet::RowBlockIndices outArg() const { | |
124 | 5 | ExplicitConstraintSet::RowBlockIndices ret; | |
125 |
1/2✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
|
5 | ret.addRow(idxOut_, length_); |
126 | 5 | return ret; | |
127 | } | ||
128 | |||
129 | // return velocity input interval | ||
130 | 5 | ExplicitConstraintSet::ColBlockIndices inDer() const { | |
131 | 5 | ExplicitConstraintSet::ColBlockIndices ret; | |
132 | ✗ | ret.addCol(idxIn_ - 1, | |
133 |
1/2✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
|
5 | length_); // TODO this assumes there is only the freeflyer |
134 | 5 | return ret; | |
135 | } | ||
136 | |||
137 | // return velocity output interval | ||
138 | 5 | ExplicitConstraintSet::RowBlockIndices outDer() const { | |
139 | 5 | ExplicitConstraintSet::RowBlockIndices ret; | |
140 | ✗ | ret.addRow(idxOut_ - 1, | |
141 |
1/2✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
|
5 | length_); // TODO this assumes there is only the freeflyer |
142 | 5 | return ret; | |
143 | } | ||
144 | }; // class TestFunction | ||
145 | |||
146 | ✗ | matrix3_t exponential(const vector3_t& aa) { | |
147 | ✗ | matrix3_t R, xCross; | |
148 | ✗ | xCross.setZero(); | |
149 | ✗ | xCross(1, 0) = +aa(2); | |
150 | ✗ | xCross(0, 1) = -aa(2); | |
151 | ✗ | xCross(2, 0) = -aa(1); | |
152 | ✗ | xCross(0, 2) = +aa(1); | |
153 | ✗ | xCross(2, 1) = +aa(0); | |
154 | ✗ | xCross(1, 2) = -aa(0); | |
155 | ✗ | R.setIdentity(); | |
156 | ✗ | value_type theta = aa.norm(); | |
157 | ✗ | if (theta < 1e-6) { | |
158 | ✗ | R += xCross; | |
159 | ✗ | R += 0.5 * xCross.transpose() * xCross; | |
160 | } else { | ||
161 | ✗ | R += sin(theta) / theta * xCross; | |
162 | ✗ | R += 2 * std::pow(sin(theta / 2), 2) / std::pow(theta, 2) * xCross * xCross; | |
163 | } | ||
164 | ✗ | return R; | |
165 | } | ||
166 | |||
167 | class ExplicitTransformation : public DifferentiableFunction { | ||
168 | public: | ||
169 | JointPtr_t joint_; | ||
170 | size_type in_, inDer_; | ||
171 | RelativeTransformationPtr_t rt_; | ||
172 | |||
173 | 1 | ExplicitTransformation(JointPtr_t joint, size_type in, size_type l, | |
174 | size_type inDer, size_type lDer) | ||
175 | 1 | : DifferentiableFunction(l, lDer, | |
176 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | LiegroupSpacePtr_t(LiegroupSpace::R3xSO3()), |
177 | "ExplicitTransformation"), | ||
178 | 1 | joint_(joint), | |
179 | 1 | in_(in), | |
180 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
3 | inDer_(inDer) { |
181 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
|
4 | rt_ = RelativeTransformation::create("RT", joint_->robot(), |
182 |
1/2✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | joint_->robot()->rootJoint(), joint_, |
183 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
3 | Transform3s::Identity()); |
184 | 1 | } | |
185 | |||
186 | 1 | ExplicitConstraintSet::RowBlockIndices inArg() const { | |
187 | 1 | ExplicitConstraintSet::RowBlockIndices ret; | |
188 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | ret.addRow(in_, inputSize()); |
189 | 1 | return ret; | |
190 | } | ||
191 | |||
192 | 1 | ExplicitConstraintSet::RowBlockIndices outArg() const { | |
193 | 1 | ExplicitConstraintSet::RowBlockIndices ret; | |
194 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ret.addRow(0, 7); |
195 | 1 | return ret; | |
196 | } | ||
197 | |||
198 | 2 | ExplicitConstraintSet::ColBlockIndices inDer() const { | |
199 | 2 | ExplicitConstraintSet::ColBlockIndices ret; | |
200 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | ret.addCol(inDer_, inputDerivativeSize()); |
201 | 2 | return ret; | |
202 | } | ||
203 | |||
204 | 1 | ExplicitConstraintSet::RowBlockIndices outDer() const { | |
205 | 1 | ExplicitConstraintSet::RowBlockIndices ret; | |
206 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ret.addRow(0, 6); |
207 | 1 | return ret; | |
208 | } | ||
209 | |||
210 | 1 | vector_t config(vectorIn_t arg) const { | |
211 |
1/2✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vector_t q = joint_->robot()->neutralConfiguration(); |
212 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | q.segment(in_, inputSize()) = arg; |
213 | 1 | return q; | |
214 | // joint_->robot()->currentConfiguration(q); | ||
215 | // joint_->robot()->computeForwardKinematics(); | ||
216 | } | ||
217 | |||
218 | ✗ | void impl_compute(LiegroupElementRef result, vectorIn_t arg) const { | |
219 | // forwardKinematics(arg); | ||
220 | ✗ | LiegroupElement transform(LiegroupSpace::Rn(6)); | |
221 | ✗ | vector_t q = config(arg); | |
222 | ✗ | rt_->value(transform, q); | |
223 | ✗ | result.vector().head<3>() = transform.vector().head<3>(); | |
224 | ✗ | result.vector().tail<4>() = | |
225 | ✗ | Eigen::Quaternion<value_type>(exponential(transform.vector().tail<3>())) | |
226 | ✗ | .coeffs(); | |
227 | } | ||
228 | |||
229 | 1 | void impl_jacobian(matrixOut_t jacobian, vectorIn_t arg) const { | |
230 | // forwardKinematics(arg); | ||
231 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | matrix_t J(6, rt_->inputDerivativeSize()); |
232 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vector_t q = config(arg); |
233 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | rt_->jacobian(J, q); |
234 | |||
235 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
1 | inDer().rview(J).writeTo(jacobian); |
236 | 1 | } | |
237 | }; | ||
238 | |||
239 | typedef hpp::shared_ptr<TestFunction> TestFunctionPtr_t; | ||
240 | typedef hpp::shared_ptr<ExplicitTransformation> ExplicitTransformationPtr_t; | ||
241 | |||
242 | template <int N> | ||
243 | 6 | void order_test(const AffineFunctionPtr_t f[N], const segment_t s[N + 1], | |
244 | const std::vector<int> forder, const segments_t& inArgs, | ||
245 | const segments_t& outArgs) { | ||
246 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
6 | ExplicitConstraintSet expression(LiegroupSpace::Rn(4)); |
247 |
2/2✓ Branch 1 taken 18 times.
✓ Branch 2 taken 6 times.
|
24 | for (int i = 0; i < N; ++i) { |
248 | 18 | int fo = forder[i], si = forder[i], so = forder[i] + 1; | |
249 |
1/2✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
|
72 | ExplicitPtr_t constraint(Explicit::create( |
250 |
3/6✓ Branch 2 taken 18 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 18 times.
✗ Branch 11 not taken.
|
54 | LiegroupSpace::Rn(4), f[fo], segments_t(1, s[si]), segments_t(1, s[so]), |
251 |
2/4✓ Branch 2 taken 18 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
|
36 | segments_t(1, s[si]), segments_t(1, s[so]))); |
252 |
7/14✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 18 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 18 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 18 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 18 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 18 times.
|
18 | BOOST_CHECK(expression.add(constraint) >= 0); |
253 | } | ||
254 |
5/10✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 12 taken 6 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 6 times.
|
6 | BOOST_CHECK_EQUAL(expression.inArgs().rows(), inArgs); |
255 |
5/10✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 12 taken 6 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 6 times.
|
6 | BOOST_CHECK_EQUAL(expression.outArgs().rows(), outArgs); |
256 | 6 | } | |
257 | |||
258 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(order) { |
259 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Eigen::Matrix<value_type, 1, 1> M; |
260 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | M(0, 0) = 1; |
261 | |||
262 | // dof : 0 -> 1 -> 2 -> 3 | ||
263 | // function: f0 f1 f2 | ||
264 | AffineFunctionPtr_t f[] = {AffineFunction::create(M), | ||
265 | AffineFunction::create(M), | ||
266 |
9/18✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
|
10 | AffineFunction::create(M)}; |
267 | 2 | segment_t s[] = {segment_t(0, 1), segment_t(1, 1), segment_t(2, 1), | |
268 | segment_t(3, 1)}; | ||
269 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | segments_t inArgs{s[0]}, outArgs{s[1], s[2], s[3]}; |
270 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | BlockIndex::shrink(outArgs); |
271 | |||
272 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | std::vector<int> order(3); |
273 | |||
274 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | order = {0, 1, 2}; |
275 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | order_test<3>(f, s, order, inArgs, outArgs); |
276 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | order = {0, 2, 1}; |
277 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | order_test<3>(f, s, order, inArgs, outArgs); |
278 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | order = {1, 0, 2}; |
279 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | order_test<3>(f, s, order, inArgs, outArgs); |
280 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | order = {1, 2, 0}; |
281 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | order_test<3>(f, s, order, inArgs, outArgs); |
282 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | order = {2, 0, 1}; |
283 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | order_test<3>(f, s, order, inArgs, outArgs); |
284 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | order = {2, 1, 0}; |
285 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | order_test<3>(f, s, order, inArgs, outArgs); |
286 |
2/4✓ Branch 3 taken 3 times.
✓ Branch 4 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
12 | } |
287 | |||
288 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(jacobian1) { |
289 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | matrix_t J[] = {(matrix_t(1, 1) << 1).finished(), |
290 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | (matrix_t(1, 1) << 2).finished(), |
291 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
18 | (matrix_t(1, 1) << 3).finished()}; |
292 | |||
293 | // dof : 0 -> 1 -> 2 -> 3 | ||
294 | // function: f0 f1 f2 | ||
295 | AffineFunctionPtr_t f[] = {AffineFunction::create(J[0]), | ||
296 | AffineFunction::create(J[1]), | ||
297 |
9/18✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
|
10 | AffineFunction::create(J[2])}; |
298 | segments_t s[] = { | ||
299 | 4 | segments_t(1, segment_t(0, 1)), segments_t(1, segment_t(1, 1)), | |
300 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
16 | segments_t(1, segment_t(2, 1)), segments_t(1, segment_t(3, 1))}; |
301 | |||
302 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | ExplicitConstraintSet expression(LiegroupSpace::Rn(4)); |
303 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 1 times.
|
8 | for (int i = 0; i < 3; ++i) { |
304 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
12 | ExplicitPtr_t constraint(Explicit::create(LiegroupSpace::Rn(4), f[i], s[i], |
305 |
1/2✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
|
18 | s[i + 1], s[i], s[i + 1])); |
306 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
6 | expression.add(constraint); |
307 | 6 | } | |
308 | |||
309 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | vector_t x(4); |
310 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
2 | x << 1, 2, 3, 4; |
311 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | vector_t xres = x; |
312 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
|
2 | BOOST_CHECK(expression.solve(xres)); |
313 | |||
314 | // Check the solution | ||
315 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(xres[0], x[0]); |
316 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 1 times.
|
8 | for (int i = 0; i < 3; ++i) |
317 |
9/18✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 24 taken 3 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 3 times.
✗ Branch 28 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 3 times.
|
6 | BOOST_CHECK_EQUAL(xres.segment<1>(i + 1), |
318 | (*f[i])(xres.segment<1>(i)).vector()); | ||
319 | |||
320 | // Check the jacobian | ||
321 | // It should be ( J[0], J[1] * J[0], J[2] * J[1] * J[0]) | ||
322 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | matrix_t expjac(matrix_t::Zero(expression.nv(), expression.nv())); |
323 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
|
2 | expjac.col(0) << 1, J[0], J[1] * J[0], J[2] * J[1] * J[0]; |
324 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | matrix_t jacobian(expression.nv(), expression.nv()); |
325 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
2 | expression.jacobian(jacobian, xres); |
326 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(jacobian, expjac); |
327 |
6/12✓ Branch 5 taken 4 times.
✓ Branch 6 taken 1 times.
✓ Branch 7 taken 3 times.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 3 times.
✓ Branch 10 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
30 | } |
328 | |||
329 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(jacobian2) { |
330 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
4 | matrix_t J[] = {(matrix_t(1, 2) << 3.2, -0.3).finished(), |
331 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | (matrix_t(1, 1) << 4.1).finished(), |
332 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
|
18 | (matrix_t(1, 2) << -0.3, 1.2).finished()}; |
333 | |||
334 | /* dof : 1,2 -> 0 \ | ||
335 | * function: f0 --> 4 | ||
336 | * 1 -> 3 / f2 | ||
337 | * f1 | ||
338 | */ | ||
339 | AffineFunctionPtr_t f[] = {AffineFunction::create(J[0]), | ||
340 | AffineFunction::create(J[1]), | ||
341 |
9/18✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
|
10 | AffineFunction::create(J[2])}; |
342 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | std::vector<segments_t> s(6); |
343 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | s[0] = {segment_t(1, 2)}; |
344 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | s[1] = {segment_t(0, 1)}; |
345 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | s[2] = {segment_t(3, 1)}; |
346 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | s[3] = {segment_t(4, 1)}; |
347 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | s[4] = {segment_t(0, 1), segment_t(3, 1)}; |
348 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | s[5] = {segment_t(1, 1)}; |
349 | |||
350 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | ExplicitConstraintSet expression(LiegroupSpace::Rn(5)); |
351 | 2 | ExplicitPtr_t constraint; | |
352 | constraint = | ||
353 |
2/4✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | Explicit::create(LiegroupSpace::Rn(5), f[0], s[0], s[1], s[0], s[1]); |
354 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expression.add(constraint); |
355 | constraint = | ||
356 |
2/4✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | Explicit::create(LiegroupSpace::Rn(5), f[2], s[4], s[3], s[4], s[3]); |
357 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expression.add(constraint); |
358 | constraint = | ||
359 |
2/4✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | Explicit::create(LiegroupSpace::Rn(5), f[1], s[5], s[2], s[5], s[2]); |
360 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expression.add(constraint); |
361 | |||
362 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Eigen::MatrixXi inOutDependencies(3, 5); |
363 |
15/30✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
|
2 | inOutDependencies << 0, 1, 1, 0, 0, 0, 2, 1, 0, 0, 0, 1, 0, 0, 0; |
364 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(expression.inOutDependencies(), inOutDependencies); |
365 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | inOutDependencies.resize(3, 2); |
366 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
|
2 | inOutDependencies << 1, 1, 1, 0, 2, 1; |
367 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(expression.inOutDofDependencies(), inOutDependencies); |
368 | |||
369 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
|
2 | segments_t inArgs = s[0], outArgs = {s[1][0], s[2][0], s[3][0]}; |
370 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | BlockIndex::shrink(outArgs); |
371 | |||
372 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(expression.inArgs().rows(), inArgs); |
373 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(expression.outArgs().rows(), outArgs); |
374 | |||
375 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | vector_t x(5); |
376 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
2 | x << 1, 2, 3, 4, 5; |
377 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | vector_t xres = x; |
378 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
|
2 | BOOST_CHECK(expression.solve(xres)); |
379 | |||
380 | // Check the solution | ||
381 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(xres.segment<2>(1), x.segment<2>(1)); |
382 |
9/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(xres.segment<1>(0), (*f[0])(xres.segment<2>(1)).vector()); |
383 |
9/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(xres.segment<1>(3), (*f[1])(xres.segment<1>(1)).vector()); |
384 |
11/22✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(xres.segment<1>(4), |
385 | (*f[2])(RowBlockIndices(s[4]).rview(xres).eval()).vector()); | ||
386 | |||
387 | // Check the jacobian | ||
388 | // It should be ( J[0], J[1] * J[0], J[2] * J[1] * J[0]) | ||
389 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | matrix_t expjac(matrix_t::Zero(expression.nv(), expression.nv())); |
390 |
12/24✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
|
2 | expjac.block<5, 2>(0, 1) << J[0](0, 0), J[0](0, 1), 1, 0, 0, 1, J[1](0, 0), 0, |
391 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
2 | J[2](0, 0) * J[0](0, 0) + J[2](0, 1) * J[1](0, 0), |
392 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
2 | J[2](0, 0) * J[0](0, 1); |
393 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | matrix_t jacobian(expression.nv(), expression.nv()); |
394 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
2 | expression.jacobian(jacobian, xres); |
395 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(jacobian, expjac); |
396 | |||
397 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | matrix_t smallJ = expression.jacobianNotOutToOut(jacobian); |
398 |
10/20✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(expression.outArgs().rview(xres).eval(), |
399 | smallJ * expression.inArgs().rview(xres).eval()); | ||
400 |
4/8✓ Branch 11 taken 3 times.
✓ Branch 12 taken 1 times.
✓ Branch 13 taken 3 times.
✓ Branch 14 taken 1 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
20 | } |
401 | |||
402 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(locked_joints) { |
403 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
4 | DevicePtr_t device(makeDevice(HumanoidSimple)); |
404 | |||
405 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
|
2 | BOOST_REQUIRE(device); |
406 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | device->rootJoint()->lowerBound(0, -1); |
407 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | device->rootJoint()->lowerBound(1, -1); |
408 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | device->rootJoint()->lowerBound(2, -1); |
409 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | device->rootJoint()->upperBound(0, 1); |
410 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | device->rootJoint()->upperBound(1, 1); |
411 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | device->rootJoint()->upperBound(2, 1); |
412 | |||
413 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | JointPtr_t ee1 = device->getJointByName("lleg5_joint"), |
414 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | ee2 = device->getJointByName("rleg5_joint"), |
415 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | ee3 = device->getJointByName("rleg4_joint"); |
416 | |||
417 | LockedJointPtr_t l1( | ||
418 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
4 | LockedJoint::create(ee1, ee1->configurationSpace()->neutral())); |
419 | LockedJointPtr_t l2( | ||
420 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
4 | LockedJoint::create(ee2, ee2->configurationSpace()->neutral())); |
421 | LockedJointPtr_t l3( | ||
422 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
4 | LockedJoint::create(ee3, ee3->configurationSpace()->neutral())); |
423 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | TestFunctionPtr_t t1(new TestFunction(ee1->rankInConfiguration(), |
424 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | ee2->rankInConfiguration(), 1)); |
425 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | TestFunctionPtr_t t2(new TestFunction(ee2->rankInConfiguration(), |
426 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | ee1->rankInConfiguration(), 1)); |
427 | |||
428 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | RowBlockIndices expectedRow; |
429 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ColBlockIndices expectedCol; |
430 | |||
431 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | Configuration_t q = device->currentConfiguration(), |
432 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | qrand = ::pinocchio::randomConfiguration(device->model()); |
433 | |||
434 | { | ||
435 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | ExplicitConstraintSet expression(device->configSpace()); |
436 | 2 | ExplicitPtr_t constraint; | |
437 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
|
2 | BOOST_CHECK(expression.add(l1) >= 0); |
438 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
|
2 | BOOST_CHECK(expression.add(l1) < 0); |
439 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
|
2 | BOOST_CHECK(expression.add(l2) >= 0); |
440 | |||
441 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | expectedRow = RowBlockIndices(); |
442 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | expectedRow.addRow(ee1->rankInConfiguration(), 1); |
443 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | expectedRow.addRow(ee2->rankInConfiguration(), 1); |
444 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expectedRow.updateRows<true, true, true>(); |
445 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(expression.outArgs(), expectedRow); |
446 | |||
447 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
4 | expectedRow = RowBlockIndices(BlockIndex::difference( |
448 |
1/2✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
6 | BlockIndex::segment_t(0, expression.nq()), expectedRow.rows())); |
449 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(expression.notOutArgs(), expectedRow); |
450 | |||
451 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | expectedRow = RowBlockIndices(); |
452 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | expectedRow.addRow(ee1->rankInVelocity(), 1); |
453 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | expectedRow.addRow(ee2->rankInVelocity(), 1); |
454 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expectedRow.updateRows<true, true, true>(); |
455 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(expression.outDers(), expectedRow); |
456 | |||
457 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
4 | expectedCol = ColBlockIndices(BlockIndex::difference( |
458 |
1/2✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
6 | BlockIndex::segment_t(0, expression.nv()), expectedRow.rows())); |
459 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(expression.notOutDers(), expectedCol); |
460 | |||
461 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | expectedRow = RowBlockIndices(); |
462 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(expression.inArgs(), expectedRow); |
463 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | expectedCol = ColBlockIndices(); |
464 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(expression.inDers(), expectedCol); |
465 | |||
466 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
|
2 | BOOST_CHECK(expression.solve(qrand)); |
467 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(qrand[ee1->rankInConfiguration()], 0); |
468 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(qrand[ee2->rankInConfiguration()], 0); |
469 | |||
470 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | expression.rightHandSide(l1, vector_t::Ones(1)); |
471 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | expression.rightHandSide(l2, vector_t::Constant(1, -0.2)); |
472 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
|
2 | BOOST_CHECK(expression.solve(qrand)); |
473 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(qrand[ee1->rankInConfiguration()], 1); |
474 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(qrand[ee2->rankInConfiguration()], -0.2); |
475 | |||
476 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
2 | matrix_t jacobian(device->numberDof(), device->numberDof()); |
477 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
2 | expression.jacobian(jacobian, q); |
478 |
9/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 1 times.
|
2 | BOOST_CHECK(expression.jacobianNotOutToOut(jacobian).eval().isZero()); |
479 | 2 | } | |
480 | |||
481 | { | ||
482 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | ExplicitConstraintSet expression(device->configSpace()); |
483 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
|
2 | BOOST_CHECK(expression.add(l1) >= 0); |
484 | 2 | ExplicitPtr_t constraint; | |
485 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
8 | constraint = Explicit::create( |
486 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
4 | device->configSpace(), t1, t1->inArg().indices(), |
487 |
6/12✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
6 | t1->outArg().indices(), t1->inDer().indices(), t1->outDer().indices()); |
488 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expression.add(constraint) >= 0); |
489 | |||
490 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
|
2 | BOOST_CHECK(expression.solve(qrand)); |
491 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | vector_t error(expression.outDers().nbIndices()); |
492 |
9/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
|
2 | BOOST_CHECK(expression.isSatisfied(qrand, error)); |
493 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(qrand[ee1->rankInConfiguration()], 0); |
494 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(qrand[ee2->rankInConfiguration()], 0); |
495 | |||
496 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
2 | matrix_t jacobian(device->numberDof(), device->numberDof()); |
497 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
2 | expression.jacobian(jacobian, q); |
498 |
9/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 1 times.
|
2 | BOOST_CHECK(expression.jacobianNotOutToOut(jacobian).eval().isZero()); |
499 | 2 | } | |
500 | |||
501 | { | ||
502 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | ExplicitConstraintSet expression(device->configSpace()); |
503 | 2 | ExplicitPtr_t constraint; | |
504 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
8 | constraint = Explicit::create( |
505 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
4 | device->configSpace(), t1, t1->inArg().indices(), |
506 |
6/12✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
6 | t1->outArg().indices(), t1->inDer().indices(), t1->outDer().indices()); |
507 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expression.add(constraint) >= 0); |
508 | |||
509 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
2 | matrix_t jacobian(device->numberDof(), device->numberDof()); |
510 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
2 | expression.jacobian(jacobian, q); |
511 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(jacobian(ee2->rankInVelocity(), ee1->rankInVelocity()), |
512 | 1); | ||
513 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(expression.jacobianNotOutToOut(jacobian).eval().norm(), |
514 | 1); | ||
515 | 2 | } | |
516 | |||
517 | { | ||
518 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | ExplicitConstraintSet expression(device->configSpace()); |
519 | 2 | ExplicitPtr_t constraint; | |
520 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
8 | constraint = Explicit::create( |
521 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
4 | device->configSpace(), t1, t1->inArg().indices(), |
522 |
6/12✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
6 | t1->outArg().indices(), t1->inDer().indices(), t1->outDer().indices()); |
523 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expression.add(constraint) >= 0); |
524 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
8 | constraint = Explicit::create( |
525 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
4 | device->configSpace(), t2, t2->inArg().indices(), |
526 |
6/12✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
6 | t2->outArg().indices(), t2->inDer().indices(), t2->outDer().indices()); |
527 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expression.add(constraint) < 0); |
528 | 2 | } | |
529 | |||
530 | { | ||
531 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | ExplicitConstraintSet expression(device->configSpace()); |
532 | 2 | ExplicitPtr_t constraint; | |
533 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
8 | constraint = Explicit::create( |
534 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
4 | device->configSpace(), t1, t1->inArg().indices(), |
535 |
6/12✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
6 | t1->outArg().indices(), t1->inDer().indices(), t1->outDer().indices()); |
536 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expression.add(constraint) >= 0); |
537 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
|
2 | BOOST_CHECK(expression.add(l2) < 0); |
538 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
|
2 | BOOST_CHECK(expression.add(l3) >= 0); |
539 | |||
540 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
2 | matrix_t jacobian(device->numberDof(), device->numberDof()); |
541 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
2 | expression.jacobian(jacobian, q); |
542 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(jacobian(ee2->rankInVelocity(), ee1->rankInVelocity()), |
543 | 1); | ||
544 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(expression.jacobianNotOutToOut(jacobian).eval().norm(), |
545 | 1); | ||
546 | 2 | } | |
547 | |||
548 | { | ||
549 | // Find a joint such that the config parameters for the chain from the root | ||
550 | // joint to it are the n first parameters (i.e. q.segment(0, n)). | ||
551 | // We take the one which gives the longest block | ||
552 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | JointPtr_t parent = device->rootJoint(), |
553 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | current = device->getJointAtConfigRank(7); |
554 |
3/4✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✓ Branch 9 taken 6 times.
✓ Branch 10 taken 1 times.
|
14 | while (current->parentJoint()->index() == parent->index()) { |
555 | 12 | parent = current; | |
556 |
1/2✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
|
24 | current = device->getJointAtConfigRank(current->rankInConfiguration() + |
557 |
2/4✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
|
12 | current->configSize()); |
558 | } | ||
559 | // std::cout << parent->name() << std::endl; | ||
560 | |||
561 | ExplicitTransformationPtr_t et(new ExplicitTransformation( | ||
562 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | parent, 7, 6, parent->rankInConfiguration() + parent->configSize() - 7, |
563 |
5/10✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
|
4 | parent->rankInVelocity() + parent->numberDof() - 6)); |
564 | |||
565 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | ExplicitConstraintSet expression(device->configSpace()); |
566 | 2 | ExplicitPtr_t constraint; | |
567 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
8 | constraint = Explicit::create( |
568 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
4 | device->configSpace(), et, et->inArg().indices(), |
569 |
6/12✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
6 | et->outArg().indices(), et->inDer().indices(), et->outDer().indices()); |
570 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expression.add(constraint) >= 0); |
571 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
|
2 | BOOST_CHECK(expression.add(l2) >= 0); |
572 | |||
573 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
2 | matrix_t jacobian(device->numberDof(), device->numberDof()); |
574 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
2 | expression.jacobian(jacobian, qrand); |
575 | 2 | } | |
576 | 2 | } | |
577 | |||
578 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(RelativePose) { |
579 | const std::string urdf( | ||
580 | "<robot name=\"two-freeflyers\">\n" | ||
581 | " <link name=\"base_link\">\n" | ||
582 | " </link>\n" | ||
583 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | "</robot>"); |
584 | // Make robot with two free flyers. | ||
585 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
4 | DevicePtr_t device(Device::create("two-freeflyers")); |
586 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
|
2 | hpp::pinocchio::urdf::loadModelFromString(device, 0, "1", "freeflyer", urdf, |
587 | ""); | ||
588 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
|
2 | hpp::pinocchio::urdf::loadModelFromString(device, 0, "2", "freeflyer", urdf, |
589 | ""); | ||
590 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | assert(device->configSize() == 14); |
591 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | assert(device->numberDof() == 12); |
592 | // Set joint bounds | ||
593 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | hpp::pinocchio::JointPtr_t joint1(device->jointAt(0)); |
594 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | hpp::pinocchio::JointPtr_t joint2(device->jointAt(1)); |
595 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | vector_t low(device->configSize()); |
596 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | low.fill(-1); |
597 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | vector_t up(device->configSize()); |
598 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | up.fill(1); |
599 | |||
600 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | hpp::constraints::Transform3s frame1(pinocchio::SE3::Random()); |
601 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | hpp::constraints::Transform3s frame2(pinocchio::SE3::Random()); |
602 | // explicit relative pose | ||
603 | hpp::constraints::ExplicitPtr_t constraint( | ||
604 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
4 | hpp::constraints::explicit_::RelativePose::create( |
605 | "explicit-relative-pose", device, joint1, joint2, frame1, frame2, | ||
606 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
6 | 6 * Equality, std::vector<bool>(6, true))); |
607 |
1/2✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
2 | assert(constraint->inputConf().size() == 1); |
608 |
1/2✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
2 | assert(constraint->inputConf()[0].first == 0); |
609 |
1/2✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
2 | assert(constraint->inputConf()[0].second == 7); |
610 | |||
611 |
2/2✓ Branch 0 taken 100 times.
✓ Branch 1 taken 1 times.
|
202 | for (size_type k = 0; k < 100; ++k) { |
612 | // Pick a random configuration | ||
613 |
1/2✓ Branch 3 taken 100 times.
✗ Branch 4 not taken.
|
200 | vector_t q_rand(pinocchio::randomConfiguration(device->model(), low, up)); |
614 |
2/2✓ Branch 0 taken 6400 times.
✓ Branch 1 taken 100 times.
|
13000 | for (size_type i = 0; i < 64; ++i) { |
615 |
1/2✓ Branch 1 taken 6400 times.
✗ Branch 2 not taken.
|
12800 | vector_t q(q_rand); |
616 | 12800 | size_type m = 1; | |
617 |
1/2✓ Branch 2 taken 6400 times.
✗ Branch 3 not taken.
|
12800 | hpp::constraints::ComparisonTypes_t comp(6 * EqualToZero); |
618 |
2/2✓ Branch 0 taken 38400 times.
✓ Branch 1 taken 6400 times.
|
89600 | for (size_type j = 0; j < 6; ++j) { |
619 | // m = 2^(j+1) | ||
620 |
2/2✓ Branch 0 taken 19200 times.
✓ Branch 1 taken 19200 times.
|
76800 | if ((m & i) == 0) { |
621 | 38400 | comp[j] = Equality; | |
622 | } else { | ||
623 | 38400 | comp[j] = EqualToZero; | |
624 | } | ||
625 | 76800 | m *= 2; | |
626 | } | ||
627 |
1/2✓ Branch 2 taken 6400 times.
✗ Branch 3 not taken.
|
12800 | constraint->comparisonType(comp); |
628 |
1/2✓ Branch 3 taken 6400 times.
✗ Branch 4 not taken.
|
12800 | hpp::constraints::ExplicitConstraintSet ecs(device->configSpace()); |
629 |
1/2✓ Branch 1 taken 6400 times.
✗ Branch 2 not taken.
|
12800 | size_type res(ecs.add(constraint)); |
630 |
6/12✓ Branch 1 taken 6400 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6400 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6400 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 6400 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 6400 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 6400 times.
|
12800 | BOOST_CHECK(res != -1); |
631 | // Initialize right hand side with initial value of q -> rhs0_impl | ||
632 |
1/2✓ Branch 4 taken 6400 times.
✗ Branch 5 not taken.
|
12800 | LiegroupElement rhs0_impl(constraint->function().outputSpace()); |
633 |
2/4✓ Branch 1 taken 6400 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6400 times.
✗ Branch 5 not taken.
|
12800 | rhs0_impl.vector() = ecs.rightHandSideFromInput(q); |
634 | |||
635 | // Solve constraint | ||
636 |
2/4✓ Branch 1 taken 6400 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6400 times.
✗ Branch 5 not taken.
|
12800 | ecs.solve(q); |
637 | // Get value of function h for new value of q -> rhs2_impl | ||
638 |
1/2✓ Branch 4 taken 6400 times.
✗ Branch 5 not taken.
|
12800 | LiegroupElement rhs2_impl(constraint->function().outputSpace()); |
639 |
3/6✓ Branch 3 taken 6400 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 6400 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 6400 times.
✗ Branch 10 not taken.
|
12800 | constraint->function().value(rhs2_impl, q); |
640 |
1/2✓ Branch 1 taken 6400 times.
✗ Branch 2 not taken.
|
12800 | vector_t logRhs0_impl = log(rhs0_impl); |
641 |
1/2✓ Branch 1 taken 6400 times.
✗ Branch 2 not taken.
|
12800 | vector_t logRhs2_impl = log(rhs2_impl); |
642 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 6400 times.
|
12800 | assert(logRhs0_impl.size() == 6); |
643 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 6400 times.
|
12800 | assert(logRhs2_impl.size() == 6); |
644 | // For each coordinate check that | ||
645 | // rhs2_impl [j] == 0 if comp[i] is EqualToZero | ||
646 | // rhs2_impl [j] == rhs0_impl [j] if comp[i] is Equality | ||
647 |
2/2✓ Branch 0 taken 38400 times.
✓ Branch 1 taken 6400 times.
|
89600 | for (size_type j = 0; j < 6; ++j) { |
648 |
14/26✓ Branch 1 taken 38400 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 38400 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 38400 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 19200 times.
✓ Branch 15 taken 19200 times.
✓ Branch 17 taken 19200 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 19200 times.
✓ Branch 22 taken 19200 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 19200 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 19200 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 19200 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 38400 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 38400 times.
✗ Branch 37 not taken.
✗ Branch 41 not taken.
✓ Branch 42 taken 38400 times.
|
76800 | BOOST_CHECK( |
649 | ((comp[j] == EqualToZero) && (fabs(logRhs2_impl[j]) < 1e-10)) || | ||
650 | ((comp[j] == Equality) && | ||
651 | (fabs(logRhs2_impl[j] - logRhs0_impl[j]) < 1e-10))); | ||
652 | } | ||
653 | 12800 | } | |
654 | 200 | } | |
655 | 2 | } | |
656 |