Directory: | ./ |
---|---|
File: | tests/solver-by-substitution.cc |
Date: | 2025-05-05 12:19:30 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 694 | 696 | 99.7% |
Branches: | 2255 | 4536 | 49.7% |
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 SOLVER_BY_SUBSTITUTION | ||
30 | #include <../tests/util.hh> | ||
31 | #include <Eigen/Geometry> | ||
32 | #include <boost/test/unit_test.hpp> | ||
33 | #include <hpp/constraints/affine-function.hh> | ||
34 | #include <hpp/constraints/explicit/relative-pose.hh> | ||
35 | #include <hpp/constraints/generic-transformation.hh> | ||
36 | #include <hpp/constraints/solver/by-substitution.hh> | ||
37 | #include <hpp/pinocchio/configuration.hh> | ||
38 | #include <hpp/pinocchio/device.hh> | ||
39 | #include <hpp/pinocchio/joint.hh> | ||
40 | #include <hpp/pinocchio/liegroup-element.hh> | ||
41 | #include <hpp/pinocchio/serialization.hh> | ||
42 | #include <hpp/pinocchio/simple-device.hh> | ||
43 | #include <pinocchio/algorithm/joint-configuration.hpp> | ||
44 | #include <sstream> | ||
45 | |||
46 | using hpp::constraints::AffineFunction; | ||
47 | using hpp::constraints::AffineFunctionPtr_t; | ||
48 | using hpp::constraints::ComparisonTypes_t; | ||
49 | using hpp::constraints::Configuration_t; | ||
50 | using hpp::constraints::ConstantFunction; | ||
51 | using hpp::constraints::ConstantFunctionPtr_t; | ||
52 | using hpp::constraints::DevicePtr_t; | ||
53 | using hpp::constraints::DifferentiableFunction; | ||
54 | using hpp::constraints::DifferentiableFunctionPtr_t; | ||
55 | using hpp::constraints::Equality; | ||
56 | using hpp::constraints::EqualToZero; | ||
57 | using hpp::constraints::Explicit; | ||
58 | using hpp::constraints::ExplicitConstraintSet; | ||
59 | using hpp::constraints::ExplicitPtr_t; | ||
60 | using hpp::constraints::Implicit; | ||
61 | using hpp::constraints::ImplicitPtr_t; | ||
62 | using hpp::constraints::JointPtr_t; | ||
63 | using hpp::constraints::LiegroupElement; | ||
64 | using hpp::constraints::LiegroupElementRef; | ||
65 | using hpp::constraints::LiegroupSpace; | ||
66 | using hpp::constraints::LockedJoint; | ||
67 | using hpp::constraints::matrix3_t; | ||
68 | using hpp::constraints::matrix_t; | ||
69 | using hpp::constraints::matrixOut_t; | ||
70 | using hpp::constraints::Orientation; | ||
71 | using hpp::constraints::RelativeTransformation; | ||
72 | using hpp::constraints::RelativeTransformationPtr_t; | ||
73 | using hpp::constraints::segment_t; | ||
74 | using hpp::constraints::segments_t; | ||
75 | using hpp::constraints::size_type; | ||
76 | using hpp::constraints::Transform3s; | ||
77 | using hpp::constraints::Transformation; | ||
78 | using hpp::constraints::value_type; | ||
79 | using hpp::constraints::vector3_t; | ||
80 | using hpp::constraints::vector_t; | ||
81 | using hpp::constraints::vectorIn_t; | ||
82 | using hpp::constraints::vectorOut_t; | ||
83 | using hpp::constraints::solver::BySubstitution; | ||
84 | using hpp::constraints::solver::lineSearch::Backtracking; | ||
85 | using hpp::constraints::solver::lineSearch::Constant; | ||
86 | using hpp::constraints::solver::lineSearch::ErrorNormBased; | ||
87 | using hpp::constraints::solver::lineSearch::FixedSequence; | ||
88 | using hpp::pinocchio::displayConfig; | ||
89 | using hpp::pinocchio::JACOBIAN; | ||
90 | using hpp::pinocchio::JOINT_POSITION; | ||
91 | using hpp::pinocchio::unittest::HumanoidRomeo; | ||
92 | using hpp::pinocchio::unittest::HumanoidSimple; | ||
93 | using hpp::pinocchio::unittest::makeDevice; | ||
94 | using hpp::pinocchio::unittest::ManipulatorArm2; | ||
95 | |||
96 | namespace saturation = hpp::constraints::solver::saturation; | ||
97 | |||
98 | 1016 | matrix_t randomPositiveDefiniteMatrix(int N) { | |
99 |
1/2✓ Branch 2 taken 1016 times.
✗ Branch 3 not taken.
|
1016 | matrix_t A(matrix_t::Random(N, N)); |
100 |
9/18✓ Branch 1 taken 1016 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1016 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1016 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1016 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1016 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1016 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1016 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1016 times.
✗ Branch 27 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 1016 times.
|
1016 | BOOST_REQUIRE((A.array() < 1).all()); |
101 |
9/18✓ Branch 1 taken 1016 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1016 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1016 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1016 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1016 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1016 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1016 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1016 times.
✗ Branch 27 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 1016 times.
|
1016 | BOOST_REQUIRE((A.array() > -1).all()); |
102 | |||
103 |
4/8✓ Branch 1 taken 1016 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1016 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1016 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1016 times.
✗ Branch 11 not taken.
|
1016 | A = (A + A.transpose()) / 2; |
104 |
3/6✓ Branch 1 taken 1016 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1016 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1016 times.
✗ Branch 8 not taken.
|
1016 | A += N * matrix_t::Identity(N, N); |
105 |
1/2✓ Branch 1 taken 1016 times.
✗ Branch 2 not taken.
|
1016 | A /= N; |
106 | 1016 | return A; | |
107 | } | ||
108 | |||
109 | const value_type test_precision = 1e-5; | ||
110 | |||
111 | // x y z | ||
112 | template <int N1, int N2, int N3> | ||
113 | 4 | void test_quadratic() { | |
114 | 4 | const int N = N1 + N2 + N3; | |
115 | |||
116 | // (x y z) A (x y z) | ||
117 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | matrix_t A(randomPositiveDefiniteMatrix(N)); |
118 |
3/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
|
4 | Quadratic::Ptr_t quad(new Quadratic(A)); |
119 | |||
120 | // y = B * z | ||
121 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | matrix_t B(matrix_t::Random(N2, N3)); |
122 | 4 | const int Ninf = std::min(N2, N3); | |
123 |
3/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
|
4 | B.topLeftCorner(Ninf, Ninf) = randomPositiveDefiniteMatrix(Ninf); |
124 | 4 | segments_t in; | |
125 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | in.push_back(segment_t(N1 + N2, N3)); |
126 | 4 | segments_t out; | |
127 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | out.push_back(segment_t(N1, N2)); |
128 |
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.
|
8 | AffineFunctionPtr_t affine(AffineFunction::create(B)); |
129 |
1/2✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
12 | ExplicitPtr_t expl( |
130 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
8 | Explicit::create(LiegroupSpace::Rn(N), affine, in, out, in, out)); |
131 | |||
132 | // Make solver | ||
133 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | BySubstitution solver(LiegroupSpace::Rn(N)); |
134 | 4 | solver.maxIterations(20); | |
135 | 4 | solver.errorThreshold(test_precision); | |
136 |
4/8✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
|
4 | solver.saturation(hpp::make_shared<saturation::Bounds>(-vector_t::Ones(N), |
137 | vector_t::Ones(N))); | ||
138 | |||
139 |
3/6✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
|
4 | solver.add(Implicit::create(quad, ComparisonTypes_t(1, EqualToZero))); |
140 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
4 | solver.add(expl); |
141 | |||
142 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | matrix_t M(N, N1 + N3); |
143 |
6/12✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
|
4 | M << matrix_t::Identity(N1, N1), matrix_t::Zero(N1, N3), |
144 |
5/10✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
|
4 | matrix_t::Zero(N2, N1), B, matrix_t::Zero(N3, N1), |
145 | matrix_t::Identity(N3, N3); | ||
146 |
4/8✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
|
4 | matrix_t Ar(M.transpose() * A * M); |
147 | |||
148 |
7/14✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
|
4 | BOOST_CHECK_EQUAL(Ar.fullPivLu().rank(), N1 + N3); |
149 | |||
150 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | vector_t x(N); |
151 | |||
152 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | x.setZero(); |
153 |
8/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 2 times.
|
4 | BOOST_CHECK(solver.isSatisfied(x)); |
154 | |||
155 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | x.setRandom(); |
156 |
13/26✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 2 times.
✗ Branch 36 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✗ Branch 47 not taken.
✓ Branch 48 taken 2 times.
|
4 | SOLVER_CHECK_SOLVE(solver.solve<Backtracking>(x), SUCCESS); |
157 | // EIGEN_VECTOR_IS_APPROX (x, vector_t::Zero(N)); | ||
158 |
19/38✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 2 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 64 not taken.
✓ Branch 65 taken 2 times.
|
4 | EIGEN_VECTOR_IS_APPROX(x.segment<N2>(N1), B * x.tail<N3>()); |
159 |
9/18✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 2 times.
|
4 | BOOST_CHECK_SMALL(value_type(x.transpose() * A * x), test_precision); |
160 | |||
161 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | matrix_t expectedJ(1, N1 + N3), J(1, N1 + N3); |
162 | |||
163 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | x.setRandom(); |
164 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
|
4 | solver.explicitConstraintSet().solve(x); |
165 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | expectedJ = |
166 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | 2 * |
167 |
3/6✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
|
8 | solver.explicitConstraintSet().notOutArgs().rview(x).eval().transpose() * |
168 | Ar; | ||
169 | |||
170 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | solver.computeValue<true>(x); |
171 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | solver.updateJacobian(x); |
172 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | solver.getReducedJacobian(J); |
173 | |||
174 |
11/22✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
|
4 | EIGEN_IS_APPROX(expectedJ, J); |
175 | 4 | } | |
176 | |||
177 | // w x y z | ||
178 | template <int N1, int N2, int N4, int N3> | ||
179 | 4 | void test_quadratic2() { | |
180 | 4 | const int N = N1 + N2 + N3 + N4; | |
181 | |||
182 | // (w x y z) A (w x y z) | ||
183 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | matrix_t A(randomPositiveDefiniteMatrix(N)); |
184 |
3/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
|
4 | Quadratic::Ptr_t quad(new Quadratic(A)); |
185 | |||
186 | // x = B * y | ||
187 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | matrix_t B(matrix_t::Random(N2, N3)); |
188 | 4 | const int Ninf = std::min(N2, N3); | |
189 |
3/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
|
4 | B.topLeftCorner(Ninf, Ninf) = randomPositiveDefiniteMatrix(Ninf); |
190 | 4 | segments_t in1; | |
191 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | in1.push_back(segment_t(N1 + N2, N3)); |
192 | 4 | segments_t out1; | |
193 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | out1.push_back(segment_t(N1, N2)); |
194 |
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.
|
8 | AffineFunctionPtr_t affine1(AffineFunction::create(B)); |
195 |
1/2✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
12 | ExplicitPtr_t expl1( |
196 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
8 | Explicit::create(LiegroupSpace::Rn(N), affine1, in1, out1, in1, out1)); |
197 | |||
198 | // y = C * z | ||
199 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | matrix_t C(matrix_t::Random(N3, N4)); |
200 | 4 | const int Ninf2 = std::min(N3, N4); | |
201 |
3/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
|
4 | C.topLeftCorner(Ninf2, Ninf2) = randomPositiveDefiniteMatrix(Ninf2); |
202 | 4 | segments_t in2; | |
203 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | in2.push_back(segment_t(N1 + N2 + N3, N4)); |
204 | 4 | segments_t out2; | |
205 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | out2.push_back(segment_t(N1 + N2, N3)); |
206 |
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.
|
8 | AffineFunctionPtr_t affine2(AffineFunction::create(C)); |
207 |
1/2✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
12 | ExplicitPtr_t expl2( |
208 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
8 | Explicit::create(LiegroupSpace::Rn(N), affine2, in2, out2, in2, out2)); |
209 | |||
210 | // Make solver | ||
211 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | BySubstitution solver(LiegroupSpace::Rn(N)); |
212 | 4 | solver.maxIterations(20); | |
213 | 4 | solver.errorThreshold(test_precision); | |
214 |
4/8✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
|
4 | solver.saturation(hpp::make_shared<saturation::Bounds>(-vector_t::Ones(N), |
215 | vector_t::Ones(N))); | ||
216 | |||
217 |
3/6✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
|
4 | solver.add(Implicit::create(quad, ComparisonTypes_t(1, EqualToZero))); |
218 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | solver.add(expl1); |
219 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
4 | solver.add(expl2); |
220 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | solver.explicitConstraintSetHasChanged(); |
221 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4 | assert(solver.contains(expl1)); |
222 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4 | assert(solver.contains(expl2)); |
223 | |||
224 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | matrix_t M(N, N1 + N4); |
225 |
6/12✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
|
4 | M << matrix_t::Identity(N1, N1), matrix_t::Zero(N1, N4), |
226 |
7/14✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
|
4 | matrix_t::Zero(N2, N1), B * C, matrix_t::Zero(N3, N1), C, |
227 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | matrix_t::Zero(N4, N1), matrix_t::Identity(N4, N4); |
228 |
4/8✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
|
4 | matrix_t Ar(M.transpose() * A * M); |
229 | |||
230 |
7/14✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
|
4 | BOOST_CHECK_EQUAL(Ar.fullPivLu().rank(), N1 + N4); |
231 | |||
232 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | vector_t x(N); |
233 | |||
234 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | x.setZero(); |
235 |
8/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 2 times.
|
4 | BOOST_CHECK(solver.isSatisfied(x)); |
236 | |||
237 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | x.setRandom(); |
238 |
13/26✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 2 times.
✗ Branch 36 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✗ Branch 47 not taken.
✓ Branch 48 taken 2 times.
|
4 | SOLVER_CHECK_SOLVE(solver.solve<Backtracking>(x), SUCCESS); |
239 | // SOLVER_CHECK_SOLVE (solver.solve<lineSearch::Constant>(x), SUCCESS); | ||
240 | // EIGEN_VECTOR_IS_APPROX (x, vector_t::Zero(N)); | ||
241 |
19/38✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 2 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 64 not taken.
✓ Branch 65 taken 2 times.
|
4 | EIGEN_VECTOR_IS_APPROX(x.segment<N2>(N1), B * x.segment<N3>(N1 + N2)); |
242 |
19/38✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 2 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 64 not taken.
✓ Branch 65 taken 2 times.
|
4 | EIGEN_VECTOR_IS_APPROX(x.segment<N3>(N1 + N2), |
243 | C * x.segment<N4>(N1 + N2 + N3)); | ||
244 |
9/18✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 2 times.
|
4 | BOOST_CHECK_SMALL(value_type(x.transpose() * A * x), test_precision); |
245 | |||
246 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | matrix_t expectedJ(1, N1 + N4), J(1, N1 + N4); |
247 | |||
248 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | x.setRandom(); |
249 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
|
4 | solver.explicitConstraintSet().solve(x); |
250 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | expectedJ = |
251 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | 2 * |
252 |
3/6✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
|
8 | solver.explicitConstraintSet().notOutArgs().rview(x).eval().transpose() * |
253 | Ar; | ||
254 | |||
255 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | solver.computeValue<true>(x); |
256 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | solver.updateJacobian(x); |
257 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | solver.getReducedJacobian(J); |
258 | |||
259 |
11/22✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
|
4 | EIGEN_IS_APPROX(expectedJ, J); |
260 | 4 | } | |
261 | |||
262 | // w x y z | ||
263 | template <int N1, int N2, int N4, int N3> | ||
264 | 4 | void test_quadratic3() { | |
265 | 4 | const int N = N1 + N2 + N3 + N4; | |
266 | |||
267 | // x = B * (y z) | ||
268 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | matrix_t B(matrix_t::Random(N2, N3 + N4)); |
269 | 4 | const int Ninf = std::min(N2, N3 + N4); | |
270 |
3/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
|
4 | B.topLeftCorner(Ninf, Ninf) = randomPositiveDefiniteMatrix(Ninf); |
271 | 4 | segments_t in1; | |
272 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | in1.push_back(segment_t(N1 + N2, N3 + N4)); |
273 | 4 | segments_t out1; | |
274 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | out1.push_back(segment_t(N1, N2)); |
275 |
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.
|
8 | AffineFunctionPtr_t affine1(AffineFunction::create(B)); |
276 |
1/2✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
12 | ExplicitPtr_t expl1( |
277 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
8 | Explicit::create(LiegroupSpace::Rn(N), affine1, in1, out1, in1, out1)); |
278 | |||
279 | // y = C * z | ||
280 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | matrix_t C(matrix_t::Random(N3, N4)); |
281 | 4 | const int Ninf2 = std::min(N3, N4); | |
282 |
3/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
|
4 | C.topLeftCorner(Ninf2, Ninf2) = randomPositiveDefiniteMatrix(Ninf2); |
283 | 4 | segments_t in2; | |
284 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | in2.push_back(segment_t(N1 + N2 + N3, N4)); |
285 | 4 | segments_t out2; | |
286 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | out2.push_back(segment_t(N1 + N2, N3)); |
287 |
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.
|
8 | AffineFunctionPtr_t affine2(AffineFunction::create(C)); |
288 |
1/2✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
12 | ExplicitPtr_t expl2( |
289 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
8 | Explicit::create(LiegroupSpace::Rn(N), affine2, in2, out2, in2, out2)); |
290 | |||
291 | // z[0] = d | ||
292 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | vector_t d(vector_t::Random(1)); |
293 | 4 | segments_t in3; | |
294 | 4 | segments_t out3; | |
295 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | out3.push_back(segment_t(N1 + N2 + N3, 1)); |
296 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
|
4 | ConstantFunctionPtr_t constant3(ConstantFunction::create(d, 0, 0)); |
297 |
1/2✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
12 | ExplicitPtr_t expl3( |
298 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
8 | Explicit::create(LiegroupSpace::Rn(N), constant3, in3, out3, in3, out3)); |
299 | |||
300 | // (w x y z) A (w x y z) | ||
301 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | matrix_t A(randomPositiveDefiniteMatrix(N)); |
302 |
4/8✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
|
4 | Quadratic::Ptr_t quad(new Quadratic(A, -d[0])); |
303 | |||
304 | // Make solver | ||
305 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | BySubstitution solver(LiegroupSpace::Rn(N)); |
306 | 4 | solver.maxIterations(20); | |
307 | 4 | solver.errorThreshold(test_precision); | |
308 |
4/8✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
|
4 | solver.saturation(hpp::make_shared<saturation::Bounds>(-vector_t::Ones(N), |
309 | vector_t::Ones(N))); | ||
310 | |||
311 |
3/6✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
|
4 | solver.add(Implicit::create(quad, ComparisonTypes_t(1, Equality))); |
312 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | solver.add(expl1); |
313 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | solver.add(expl2); |
314 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
4 | solver.add(expl3); |
315 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | BySubstitution copySolver(solver); |
316 | |||
317 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | matrix_t M(N, N1 + N4); |
318 |
6/12✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
|
4 | M << matrix_t::Identity(N1, N1), matrix_t::Zero(N1, N4), |
319 |
7/14✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
|
4 | matrix_t::Zero(N2, N1), B.leftCols(N3) * C + B.rightCols(N4), |
320 |
5/10✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
|
4 | matrix_t::Zero(N3, N1), C, matrix_t::Zero(N4, N1), |
321 | matrix_t::Identity(N4, N4); | ||
322 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | matrix_t P(N1 + N4, N1 + N4 - 1); |
323 |
6/12✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
|
4 | P << matrix_t::Identity(N1, N1), matrix_t::Zero(N1, N4 - 1), |
324 |
4/8✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
|
4 | matrix_t::Zero(1, N1 + N4 - 1), matrix_t::Zero(N4 - 1, N1), |
325 | matrix_t::Identity(N4 - 1, N4 - 1); | ||
326 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | vector_t Xr_0(vector_t::Zero(N1 + N4)); |
327 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | Xr_0[N1] = d[0]; |
328 | |||
329 |
4/8✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
|
4 | matrix_t Ar(M.transpose() * A * M); |
330 | |||
331 |
7/14✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
|
4 | BOOST_CHECK_EQUAL(Ar.fullPivLu().rank(), N1 + N4); |
332 | |||
333 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | vector_t x(N); |
334 | |||
335 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | x.setRandom(); |
336 |
13/26✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 2 times.
✗ Branch 36 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✗ Branch 47 not taken.
✓ Branch 48 taken 2 times.
|
4 | SOLVER_CHECK_SOLVE(copySolver.solve<Backtracking>(x), SUCCESS); |
337 | // SOLVER_CHECK_SOLVE (solver.solve<lineSearch::Constant>(x), SUCCESS); | ||
338 | // EIGEN_VECTOR_IS_APPROX (x, vector_t::Zero(N)); | ||
339 |
19/38✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 2 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 64 not taken.
✓ Branch 65 taken 2 times.
|
4 | EIGEN_VECTOR_IS_APPROX(x.segment<N2>(N1), B * x.segment<N3 + N4>(N1 + N2)); |
340 |
19/38✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 2 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 64 not taken.
✓ Branch 65 taken 2 times.
|
4 | EIGEN_VECTOR_IS_APPROX(x.segment<N3>(N1 + N2), |
341 | C * x.segment<N4>(N1 + N2 + N3)); | ||
342 |
10/20✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
|
4 | BOOST_CHECK_SMALL(value_type(x.transpose() * A * x - d[0]), test_precision); |
343 | |||
344 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | matrix_t expectedJ(1, N1 + N4 - 1), J(1, N1 + N4 - 1); |
345 | |||
346 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | x.setRandom(); |
347 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
|
4 | copySolver.explicitConstraintSet().solve(x); |
348 |
5/10✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
|
8 | expectedJ = |
349 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | 2 * |
350 |
3/6✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
|
8 | (P * copySolver.explicitConstraintSet().notOutArgs().rview(x).eval() + |
351 | Xr_0) | ||
352 | .transpose() * | ||
353 | Ar * P; | ||
354 | |||
355 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | copySolver.computeValue<true>(x); |
356 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | copySolver.updateJacobian(x); |
357 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | copySolver.getReducedJacobian(J); |
358 | |||
359 |
11/22✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
|
4 | EIGEN_IS_APPROX(expectedJ, J); |
360 | 4 | } | |
361 | |||
362 |
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(quadratic) { |
363 | 2 | test_quadratic<3, 3, 3>(); | |
364 | 2 | test_quadratic<5, 3, 4>(); | |
365 | |||
366 | 2 | test_quadratic2<3, 3, 3, 3>(); | |
367 | 2 | test_quadratic2<3, 4, 2, 6>(); | |
368 | |||
369 | 2 | test_quadratic3<3, 3, 3, 3>(); | |
370 | 2 | test_quadratic3<1, 4, 2, 6>(); | |
371 | 2 | } | |
372 | |||
373 | 100 | void se3ToConfig(const Transform3s& oMi, vectorOut_t v) { | |
374 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 100 times.
|
100 | assert(v.size() == 7); |
375 |
3/6✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 100 times.
✗ Branch 8 not taken.
|
100 | v.head<3>() = oMi.translation(); |
376 |
2/4✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
|
100 | Eigen::Map<Transform3s::Quaternion> q(v.tail<4>().data()); |
377 |
2/4✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
|
100 | q = oMi.rotation(); |
378 | 100 | } | |
379 | |||
380 | class Frame : public DifferentiableFunction { | ||
381 | public: | ||
382 | JointPtr_t joint_; | ||
383 | |||
384 | Frame(JointPtr_t joint) | ||
385 | : DifferentiableFunction(joint->robot()->configSize(), | ||
386 | joint->robot()->numberDof(), | ||
387 | LiegroupSpace::SE3(), "Frame"), | ||
388 | joint_(joint) {} | ||
389 | |||
390 | void impl_compute(LiegroupElementRef result, vectorIn_t arg) const { | ||
391 | hpp::pinocchio::DeviceSync robot(joint_->robot()); | ||
392 | robot.currentConfiguration(arg); | ||
393 | robot.computeForwardKinematics(JOINT_POSITION); | ||
394 | |||
395 | const Transform3s& oMi = joint_->currentTransformation(robot.d()); | ||
396 | se3ToConfig(oMi, result.vector()); | ||
397 | } | ||
398 | |||
399 | void impl_jacobian(matrixOut_t J, vectorIn_t arg) const { | ||
400 | // finiteDifferenceCentral(J, arg, joint_->robot(), 1e-6); | ||
401 | hpp::pinocchio::DeviceSync robot(joint_->robot()); | ||
402 | robot.currentConfiguration(arg); | ||
403 | robot.computeForwardKinematics(JOINT_POSITION | JACOBIAN); | ||
404 | |||
405 | J = joint_->jacobian(robot.d(), true); | ||
406 | } | ||
407 | }; | ||
408 | |||
409 | 219 | matrix3_t exponential(const vector3_t& aa) { | |
410 |
2/4✓ Branch 1 taken 219 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 219 times.
✗ Branch 5 not taken.
|
219 | matrix3_t R, xCross; |
411 |
1/2✓ Branch 1 taken 219 times.
✗ Branch 2 not taken.
|
219 | xCross.setZero(); |
412 |
2/4✓ Branch 1 taken 219 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 219 times.
✗ Branch 5 not taken.
|
219 | xCross(1, 0) = +aa(2); |
413 |
2/4✓ Branch 1 taken 219 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 219 times.
✗ Branch 5 not taken.
|
219 | xCross(0, 1) = -aa(2); |
414 |
2/4✓ Branch 1 taken 219 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 219 times.
✗ Branch 5 not taken.
|
219 | xCross(2, 0) = -aa(1); |
415 |
2/4✓ Branch 1 taken 219 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 219 times.
✗ Branch 5 not taken.
|
219 | xCross(0, 2) = +aa(1); |
416 |
2/4✓ Branch 1 taken 219 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 219 times.
✗ Branch 5 not taken.
|
219 | xCross(2, 1) = +aa(0); |
417 |
2/4✓ Branch 1 taken 219 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 219 times.
✗ Branch 5 not taken.
|
219 | xCross(1, 2) = -aa(0); |
418 |
1/2✓ Branch 1 taken 219 times.
✗ Branch 2 not taken.
|
219 | R.setIdentity(); |
419 |
1/2✓ Branch 1 taken 219 times.
✗ Branch 2 not taken.
|
219 | value_type theta = aa.norm(); |
420 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 219 times.
|
219 | if (theta < 1e-6) { |
421 | ✗ | R += xCross; | |
422 | ✗ | R += 0.5 * xCross.transpose() * xCross; | |
423 | } else { | ||
424 |
2/4✓ Branch 1 taken 219 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 219 times.
✗ Branch 5 not taken.
|
219 | R += sin(theta) / theta * xCross; |
425 |
3/6✓ Branch 3 taken 219 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 219 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 219 times.
✗ Branch 10 not taken.
|
219 | R += 2 * std::pow(sin(theta / 2), 2) / std::pow(theta, 2) * xCross * xCross; |
426 | } | ||
427 | 438 | return R; | |
428 | } | ||
429 | |||
430 | // Pose of a joint in root joint frame | ||
431 | // | ||
432 | // This differentiable function returns as ouput an element of R3xSO3 | ||
433 | // corresponding to the pose of a joint J in the root joint frame of a robot. | ||
434 | // The input is the vector of configuration variables that move the joint with | ||
435 | // respect to the root joint. | ||
436 | class ExplicitTransformation : public DifferentiableFunction { | ||
437 | public: | ||
438 | JointPtr_t joint_; | ||
439 | size_type in_, inDer_; | ||
440 | // log_{SO(3)} (rootJoint^{-1}.joint) | ||
441 | RelativeTransformationPtr_t rt_; | ||
442 | |||
443 | // Constructor | ||
444 | // joint: joint J the pose of which is computed with respect to root joint. | ||
445 | // [in:in+l] : interval of robot configuration variables that | ||
446 | // modify the position of J with respect to the root | ||
447 | // joint. | ||
448 | // [inDer:inDer+lDer]: interval of robot velocity variables that modify the | ||
449 | // position of J with respect to the root joint. | ||
450 | 1 | ExplicitTransformation(JointPtr_t joint, size_type in, size_type l, | |
451 | size_type inDer, size_type lDer) | ||
452 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | : DifferentiableFunction(l, lDer, LiegroupSpace::R3xSO3(), |
453 | "ExplicitTransformation"), | ||
454 | 1 | joint_(joint), | |
455 | 1 | in_(in), | |
456 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
3 | inDer_(inDer) { |
457 |
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(), |
458 |
1/2✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | joint_->robot()->rootJoint(), joint_, |
459 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
3 | Transform3s::Identity()); |
460 | 1 | } | |
461 | |||
462 | 1 | ExplicitConstraintSet::RowBlockIndices inArg() const { | |
463 | 1 | ExplicitConstraintSet::RowBlockIndices ret; | |
464 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | ret.addRow(in_, inputSize()); |
465 | 1 | return ret; | |
466 | } | ||
467 | |||
468 | 1 | ExplicitConstraintSet::RowBlockIndices outArg() const { | |
469 | 1 | ExplicitConstraintSet::RowBlockIndices ret; | |
470 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ret.addRow(0, 7); |
471 | 1 | return ret; | |
472 | } | ||
473 | |||
474 | 108 | ExplicitConstraintSet::ColBlockIndices inDer() const { | |
475 | 108 | ExplicitConstraintSet::ColBlockIndices ret; | |
476 |
1/2✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
|
108 | ret.addCol(inDer_, inputDerivativeSize()); |
477 | 108 | return ret; | |
478 | } | ||
479 | |||
480 | 1 | ExplicitConstraintSet::RowBlockIndices outDer() const { | |
481 | 1 | ExplicitConstraintSet::RowBlockIndices ret; | |
482 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ret.addRow(0, 6); |
483 | 1 | return ret; | |
484 | } | ||
485 | // Fill input variables with arg. Other variables are set to neutral | ||
486 | 326 | vector_t config(vectorIn_t arg) const { | |
487 |
1/2✓ Branch 4 taken 326 times.
✗ Branch 5 not taken.
|
326 | vector_t q = joint_->robot()->neutralConfiguration(); |
488 |
2/4✓ Branch 2 taken 326 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 326 times.
✗ Branch 6 not taken.
|
326 | q.segment(in_, inputSize()) = arg; |
489 | 326 | return q; | |
490 | // joint_->robot()->currentConfiguration(q); | ||
491 | // joint_->robot()->computeForwardKinematics(); | ||
492 | } | ||
493 | |||
494 | // Compute relative position of joint_ wrt root joint | ||
495 | // arg: vector of configuration variables that move joint_ in root joint. | ||
496 | // result: R3xSO3 element containing the result | ||
497 | 219 | void impl_compute(LiegroupElementRef result, vectorIn_t arg) const { | |
498 | // forwardKinematics(arg); | ||
499 |
2/4✓ Branch 1 taken 219 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 219 times.
✗ Branch 5 not taken.
|
219 | LiegroupElement transform(LiegroupSpace::Rn(6)); |
500 |
2/4✓ Branch 1 taken 219 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 219 times.
✗ Branch 5 not taken.
|
219 | vector_t q = config(arg); |
501 |
3/6✓ Branch 2 taken 219 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 219 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 219 times.
✗ Branch 9 not taken.
|
219 | rt_->value(transform, q); |
502 |
3/6✓ Branch 2 taken 219 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 219 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 219 times.
✗ Branch 10 not taken.
|
219 | result.vector().head<3>() = transform.vector().head<3>(); |
503 |
1/2✓ Branch 2 taken 219 times.
✗ Branch 3 not taken.
|
219 | result.vector().tail<4>() = |
504 |
4/8✓ Branch 2 taken 219 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 219 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 219 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 219 times.
✗ Branch 12 not taken.
|
219 | Eigen::Quaternion<value_type>(exponential(transform.vector().tail<3>())) |
505 |
1/2✓ Branch 2 taken 219 times.
✗ Branch 3 not taken.
|
438 | .coeffs(); |
506 | |||
507 | // Transform3s tf1 = joint_->robot()->rootJoint()->currentTransformation(); | ||
508 | // Transform3s tf2 = joint_->currentTransformation(); | ||
509 | // Transform3s tf = tf2.inverse() * tf1; | ||
510 | |||
511 | // result.head<3> = tf.translation(); | ||
512 | // result.tail<4> = Eigen::Quaternion<value_type>(tf.rotation()); | ||
513 | 219 | } | |
514 | |||
515 | 107 | void impl_jacobian(matrixOut_t jacobian, vectorIn_t arg) const { | |
516 | // forwardKinematics(arg); | ||
517 |
1/2✓ Branch 3 taken 107 times.
✗ Branch 4 not taken.
|
107 | matrix_t J(6, rt_->inputDerivativeSize()); |
518 |
2/4✓ Branch 1 taken 107 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 107 times.
✗ Branch 5 not taken.
|
107 | vector_t q = config(arg); |
519 |
3/6✓ Branch 2 taken 107 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 107 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 107 times.
✗ Branch 9 not taken.
|
107 | rt_->jacobian(J, q); |
520 | |||
521 |
3/6✓ Branch 1 taken 107 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 107 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 107 times.
✗ Branch 8 not taken.
|
107 | inDer().rview(J).writeTo(jacobian); |
522 | 107 | } | |
523 | }; | ||
524 | |||
525 | typedef hpp::shared_ptr<ExplicitTransformation> ExplicitTransformationPtr_t; | ||
526 | |||
527 |
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(functions1) { |
528 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | BySubstitution solver(LiegroupSpace::R3()); |
529 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | BySubstitution solver1(LiegroupSpace::R3()); |
530 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | BySubstitution solver2(LiegroupSpace::R3()); |
531 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | BySubstitution solver3(LiegroupSpace::R3()); |
532 | |||
533 | /// System: | ||
534 | /// f (q1, q2) = 0 | ||
535 | /// h ( q2) = 0 | ||
536 | /// q1 = g(q3) | ||
537 | /// q2 = C | ||
538 | |||
539 | // f | ||
540 | ImplicitPtr_t impl(Implicit::create( | ||
541 |
7/14✓ Branch 3 taken 1 times.
✗ Branch 4 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.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
|
4 | AffineFunction::create(matrix_t::Identity(2, 3)), 2 * EqualToZero)); |
542 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | solver.add(impl); |
543 | // Test inclusion of manifolds | ||
544 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | solver1.add(impl->copy()); |
545 |
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(solver.definesSubmanifoldOf(solver)); |
546 |
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(solver.definesSubmanifoldOf(solver1)); |
547 |
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(solver1.definesSubmanifoldOf(solver)); |
548 | |||
549 | // q1 = g(q3) | ||
550 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Eigen::Matrix<value_type, 1, 1> Jg; |
551 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Jg(0, 0) = 1; |
552 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Eigen::RowBlockIndices inArg; |
553 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | inArg.addRow(2, 1); |
554 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Eigen::ColBlockIndices inDer; |
555 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | inDer.addCol(2, 1); |
556 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Eigen::RowBlockIndices outArg; |
557 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | outArg.addRow(1, 1); |
558 | 2 | segments_t in; | |
559 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | in.push_back(segment_t(2, 1)); |
560 | 2 | segments_t out; | |
561 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | out.push_back(segment_t(0, 1)); |
562 |
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.
|
4 | AffineFunctionPtr_t affine(AffineFunction::create(matrix_t::Ones(1, 1))); |
563 | ExplicitPtr_t expl( | ||
564 |
2/4✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
4 | Explicit::create(LiegroupSpace::R3(), affine, in, out, in, out)); |
565 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | solver.add(expl); |
566 | // Test inclusion of manifolds | ||
567 |
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(solver.definesSubmanifoldOf(solver1)); |
568 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | solver1.add(expl->copy()); |
569 | // q2 = C | ||
570 |
6/12✓ 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.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
|
2 | affine = AffineFunction::create(matrix_t(1, 0), vector_t::Zero(1)); |
571 | 2 | in.clear(); | |
572 | 2 | out.clear(); | |
573 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | out.push_back(segment_t(1, 1)); |
574 |
2/4✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
2 | expl = Explicit::create(LiegroupSpace::R3(), affine, in, out, in, out); |
575 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | solver.add(expl); |
576 |
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(solver.reducedDimension(), 2); |
577 |
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(solver.definesSubmanifoldOf(solver1)); |
578 | |||
579 | // h | ||
580 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | matrix_t h(1, 3); |
581 |
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 | h << 0, 1, 0; |
582 |
5/10✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 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.
|
6 | solver.add(Implicit::create(AffineFunction::create(h), |
583 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
4 | ComparisonTypes_t(1, EqualToZero))); |
584 |
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(solver.dimension(), 3); |
585 |
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(solver.reducedDimension(), 2); |
586 |
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(solver.definesSubmanifoldOf(solver1)); |
587 | |||
588 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
4 | segments_t impDof{segment_t(2, 1)}; |
589 |
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(solver.implicitDof(), impDof); |
590 | 2 | } | |
591 | |||
592 |
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(functions2) { |
593 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | BySubstitution solver(LiegroupSpace::R3()); |
594 | |||
595 | /// System: | ||
596 | /// f (q1, q3) = 0 | ||
597 | /// q2 = g(q3) | ||
598 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Eigen::Matrix<value_type, 2, 3> Jf; |
599 |
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 | Jf << 1, 0, 0, 0, 0, 1; |
600 |
7/14✓ Branch 3 taken 1 times.
✗ Branch 4 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 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
|
2 | solver.add(Implicit::create(AffineFunction::create(Jf), 2 * EqualToZero)); |
601 | |||
602 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Eigen::Matrix<value_type, 1, 1> Jg; |
603 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Jg(0, 0) = 1; |
604 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Eigen::RowBlockIndices inArg; |
605 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | inArg.addRow(2, 1); |
606 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Eigen::ColBlockIndices inDer; |
607 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | inDer.addCol(2, 1); |
608 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Eigen::RowBlockIndices outArg; |
609 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | outArg.addRow(1, 1); |
610 | ExplicitPtr_t expl(Explicit::create( | ||
611 |
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.
|
8 | LiegroupSpace::R3(), AffineFunction::create(Jg), inArg.indices(), |
612 |
5/10✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 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.
|
10 | outArg.indices(), inDer.indices(), outArg.indices())); |
613 | 2 | ImplicitPtr_t c1(expl); | |
614 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | solver.add(expl); |
615 |
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(solver.dimension(), 2); |
616 | |||
617 | // We add to the system h(q3) = 0 | ||
618 | /// f (q1, q3) = 0 | ||
619 | /// h ( q3) = 0 | ||
620 | /// q2 = g(q3) | ||
621 | // This function should not be removed from the system. | ||
622 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Eigen::Matrix<value_type, 1, 3> Jh; |
623 |
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 | Jh << 0, 0, 1; |
624 |
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.
|
4 | ImplicitPtr_t impl(Implicit::create(AffineFunction::create(Jh), |
625 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
8 | ComparisonTypes_t(1, EqualToZero))); |
626 | 2 | ImplicitPtr_t c2(impl); | |
627 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | c2->comparisonType(ComparisonTypes_t(1, Equality)); |
628 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | solver.add(impl); |
629 |
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(solver.dimension(), 3); |
630 | |||
631 | // We add to the system q3 = C | ||
632 | // Function h should be removed, f should not. | ||
633 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | vector_t C(1); |
634 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | C(0) = 0; |
635 | 2 | segments_t out; | |
636 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | out.push_back(segment_t(2, 1)); |
637 |
2/4✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
8 | expl = Explicit::create(LiegroupSpace::R3(), |
638 |
5/10✓ 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.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
|
4 | AffineFunction::create(matrix_t(1, 0), C), |
639 | 6 | segments_t(), out, segments_t(), out); | |
640 | 2 | ImplicitPtr_t c3(expl); | |
641 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | c3->comparisonType(ComparisonTypes_t(1, Equality)); |
642 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | solver.add(expl); |
643 | |||
644 |
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(solver.dimension(), 3); |
645 |
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(solver.reducedDimension(), 2); |
646 | |||
647 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
4 | segments_t impDof = {segment_t(0, 1)}; |
648 |
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(solver.implicitDof(), impDof); |
649 | // test right hand side access by functions. | ||
650 |
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.
|
2 | vector_t rhs1(vector_t::Zero(c1->rightHandSideSize())); |
651 |
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.
|
2 | vector_t rhs2(vector_t::Random(c2->rightHandSideSize())); |
652 |
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.
|
2 | vector_t rhs3(vector_t::Random(c3->rightHandSideSize())); |
653 | |||
654 |
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 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(solver.rightHandSide(c1, rhs1)); |
655 |
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 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(solver.rightHandSide(c2, rhs2)); |
656 |
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 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(solver.rightHandSide(c3, rhs3)); |
657 | |||
658 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | vector_t tmp1(c1->rightHandSideSize()); |
659 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | tmp1.fill(sqrt(-1)); |
660 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | vector_t tmp2(c2->rightHandSideSize()); |
661 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | tmp2.fill(sqrt(-1)); |
662 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | vector_t tmp3(c3->rightHandSideSize()); |
663 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | tmp3.fill(sqrt(-1)); |
664 | |||
665 |
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(solver.getRightHandSide(c1, tmp1)); |
666 |
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(solver.getRightHandSide(c2, tmp2)); |
667 |
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(solver.getRightHandSide(c3, tmp3)); |
668 | |||
669 |
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(tmp1 == rhs1); |
670 |
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(tmp2 == rhs2); |
671 |
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(tmp3 == rhs3); |
672 | 2 | } | |
673 | |||
674 |
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(hybrid_solver) { |
675 |
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)); |
676 |
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); |
677 |
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 12 taken 1 times.
✗ Branch 13 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 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(device->rootJoint()->positionInParentFrame(), |
678 | Transform3s::Identity()); | ||
679 |
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); |
680 |
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); |
681 |
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); |
682 |
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); |
683 |
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); |
684 |
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); |
685 |
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("rleg6_joint"), |
686 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | ee2 = device->getJointByName("lleg6_joint"), |
687 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | ee3 = device->getJointByName("larm6_joint"); |
688 | |||
689 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | Configuration_t q0 = device->neutralConfiguration(); |
690 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | device->currentConfiguration(q0); |
691 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | device->computeForwardKinematics(JOINT_POSITION); |
692 | |||
693 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | JointPtr_t lleg6Joint(device->getJointByName("lleg6_joint")); |
694 |
6/12✓ 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 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(lleg6Joint->rankInConfiguration(), 12); |
695 |
6/12✓ 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 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(lleg6Joint->rankInVelocity(), 11); |
696 |
6/12✓ 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 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(lleg6Joint->configSize(), 1); |
697 |
6/12✓ 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 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(lleg6Joint->numberDof(), 1); |
698 | // Compute a configuration that satisfies the constaints. | ||
699 | // Compute relative position of "lleg6_joint" wrt root | ||
700 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | Transform3s Mlleg6(lleg6Joint->currentTransformation()); |
701 |
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 | Transform3s Mroot(device->rootJoint()->currentTransformation()); |
702 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | Transform3s M(Mroot.inverse() * Mlleg6); |
703 |
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 | q0.segment<3>(0) = M.translation(); |
704 |
4/8✓ 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.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | q0.segment<4>(3) = Eigen::Quaternion<value_type>(M.rotation()).coeffs(); |
705 | |||
706 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | BySubstitution solver(device->configSpace()); |
707 | 2 | solver.maxIterations(40); | |
708 | 2 | solver.errorThreshold(1e-4); | |
709 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | solver.saturation(hpp::make_shared<saturation::Device>(device)); |
710 | |||
711 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | device->currentConfiguration(q0); |
712 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | device->computeForwardKinematics(JOINT_POSITION); |
713 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | Transform3s tf1(ee1->currentTransformation()); |
714 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | Transform3s tf2(ee2->currentTransformation()); |
715 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | Transform3s tf3(ee3->currentTransformation()); |
716 | |||
717 |
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.
|
8 | solver.add(Implicit::create( |
718 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
4 | Orientation::create("Orientation lleg6_joint", device, ee2, tf2), |
719 | 4 | 3 * EqualToZero)); | |
720 |
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.
|
8 | solver.add(Implicit::create( |
721 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
4 | Orientation::create("Orientation larm6_joint", device, ee3, tf3), |
722 | 4 | 3 * EqualToZero)); | |
723 | |||
724 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(solver.numberStacks() == 1); |
725 | |||
726 | 2 | ExplicitTransformationPtr_t et; | |
727 | { | ||
728 |
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.
|
2 | et.reset(new ExplicitTransformation(lleg6Joint, 7, 6, 6, 6)); |
729 | } | ||
730 | // Add an explicit constraint that computes the pose of the root joint (FF) | ||
731 | // output variables are [0:7] for configurations and [0:6] for velocities | ||
732 | // output value is equal to relative pose of "lleg6_joint" with respect to | ||
733 | // the root joint. | ||
734 |
16/32✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 32 taken 1 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 1 times.
✗ Branch 36 not taken.
✓ Branch 39 taken 1 times.
✗ Branch 40 not taken.
✓ Branch 42 taken 1 times.
✗ Branch 43 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 51 taken 1 times.
✗ Branch 52 not taken.
✓ Branch 54 taken 1 times.
✗ Branch 55 not taken.
✓ Branch 57 taken 1 times.
✗ Branch 58 not taken.
✗ Branch 70 not taken.
✓ Branch 71 taken 1 times.
|
2 | BOOST_CHECK(solver.explicitConstraintSet().add(Explicit::create( |
735 | device->configSpace(), et, et->inArg().indices(), | ||
736 | et->outArg().indices(), et->inDer().indices(), | ||
737 | et->outDer().indices())) >= 0); | ||
738 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | solver.explicitConstraintSetHasChanged(); |
739 |
6/12✓ 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 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
|
2 | BOOST_TEST_MESSAGE(solver << '\n'); |
740 | |||
741 |
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 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(solver.isSatisfied(q0)); |
742 | |||
743 |
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.
|
2 | vector_t v(vector_t::Random(device->numberDof())); |
744 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v *= .1; |
745 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Configuration_t qrand(q0); |
746 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | LiegroupElement g(qrand, device->configSpace()); |
747 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | g += v; |
748 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | qrand = g.vector(); |
749 |
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(solver.solve<Backtracking>(qrand), BySubstitution::SUCCESS); |
750 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | qrand = g.vector(); |
751 |
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 26 not taken.
✓ Branch 27 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(solver.solve<ErrorNormBased>(qrand), |
752 | BySubstitution::SUCCESS); | ||
753 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | qrand = g.vector(); |
754 |
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 26 not taken.
✓ Branch 27 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(solver.solve<FixedSequence>(qrand), |
755 | BySubstitution::SUCCESS); | ||
756 |
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(solver.solve<Constant>(qrand), BySubstitution::SUCCESS); |
757 | 2 | } | |
758 | |||
759 |
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(by_substitution_serialization) { |
760 |
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)); |
761 |
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); |
762 |
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); |
763 |
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); |
764 |
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); |
765 |
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); |
766 |
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); |
767 |
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); |
768 |
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("rleg5_joint"), |
769 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | ee2 = device->getJointByName("lleg5_joint"), |
770 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | ee3 = device->getJointByName("larm5_joint"); |
771 | |||
772 |
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(), |
773 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | qrand = ::pinocchio::randomConfiguration(device->model()); |
774 | |||
775 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | BySubstitution solver(device->configSpace()); |
776 | 2 | solver.maxIterations(20); | |
777 | 2 | solver.errorThreshold(1e-3); | |
778 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | solver.saturation(hpp::make_shared<saturation::Device>(device)); |
779 | |||
780 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | device->currentConfiguration(q); |
781 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | device->computeForwardKinematics(JOINT_POSITION); |
782 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | Transform3s tf1(ee1->currentTransformation()); |
783 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | Transform3s tf2(ee2->currentTransformation()); |
784 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | Transform3s tf3(ee3->currentTransformation()); |
785 | |||
786 |
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.
|
8 | solver.add(Implicit::create( |
787 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
4 | Orientation::create("Orientation RAnkleRoll", device, ee2, tf2), |
788 | 4 | 3 * Equality)); | |
789 |
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.
|
8 | solver.add(Implicit::create( |
790 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
4 | Orientation::create("Orientation LWristPitch", device, ee3, tf3), |
791 | 4 | 3 * Equality)); | |
792 |
4/8✓ 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.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
2 | solver.add(LockedJoint::create(ee1, ee1->configurationSpace()->neutral())); |
793 | |||
794 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(solver.numberStacks() == 1); |
795 | |||
796 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | std::stringstream ss; |
797 | { | ||
798 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | hpp::serialization::xml_oarchive oa(ss); |
799 |
1/2✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | oa.insert(device->name(), device.get()); |
800 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | oa << boost::serialization::make_nvp("solver", solver); |
801 | 2 | } | |
802 | |||
803 |
6/12✓ 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 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
|
2 | BOOST_TEST_MESSAGE(ss.str()); |
804 | |||
805 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | BySubstitution r_solver(device->configSpace()); |
806 | { | ||
807 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | hpp::serialization::xml_iarchive ia(ss); |
808 |
1/2✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | ia.insert(device->name(), device.get()); |
809 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | ia >> boost::serialization::make_nvp("solver", r_solver); |
810 | 2 | } | |
811 | |||
812 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | std::ostringstream ss_result, ss_expect; |
813 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | ss_expect << solver << '\n'; |
814 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | ss_result << r_solver << '\n'; |
815 |
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 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(ss_expect.str(), ss_result.str()); |
816 | 2 | } | |
817 | |||
818 |
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(hybrid_solver_rhs) { |
819 | using namespace hpp::constraints; | ||
820 | |||
821 |
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(HumanoidRomeo)); |
822 |
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); |
823 | |||
824 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | Configuration_t q, qrand; |
825 | |||
826 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | JointPtr_t left = device->getJointByName("LWristPitch"); |
827 | TransformationR3xSO3::Ptr_t frame(TransformationR3xSO3::create( | ||
828 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 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.
|
4 | "LWristPitch", device, left, Transform3s::Identity())); |
829 | Transformation::Ptr_t logFrame(Transformation::create( | ||
830 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 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.
|
4 | "LWristPitch", device, left, Transform3s::Identity())); |
831 | |||
832 | // Check the logFrame if the log6 of frame. | ||
833 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | LiegroupElement valueFrame(frame->outputSpace()), |
834 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | logValFrame(logFrame->outputSpace()); |
835 |
4/8✓ 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.
|
2 | matrix_t Jframe(6, device->numberDof()), JlogFrame(6, device->numberDof()), |
836 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | expectedJlogFrame(6, device->numberDof()); |
837 |
1/2✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | LiegroupElement neutral = frame->outputSpace()->neutral(); |
838 |
2/2✓ Branch 0 taken 100 times.
✓ Branch 1 taken 1 times.
|
202 | for (int i = 0; i < 100; ++i) { |
839 |
1/2✓ Branch 3 taken 100 times.
✗ Branch 4 not taken.
|
200 | q = ::pinocchio::randomConfiguration(device->model()); |
840 | |||
841 |
3/6✓ Branch 2 taken 100 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 100 times.
✗ Branch 9 not taken.
|
200 | frame->value(valueFrame, q); |
842 |
3/6✓ Branch 2 taken 100 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 100 times.
✗ Branch 9 not taken.
|
200 | logFrame->value(logValFrame, q); |
843 | |||
844 |
1/2✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
|
200 | vector_t expectedLog = hpp::pinocchio::log(valueFrame); |
845 | |||
846 |
13/26✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 100 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 100 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 100 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 100 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 100 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 100 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 100 times.
✗ Branch 30 not taken.
✓ Branch 33 taken 100 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 100 times.
✗ Branch 37 not taken.
✓ Branch 39 taken 100 times.
✗ Branch 40 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 100 times.
|
200 | EIGEN_VECTOR_IS_APPROX(expectedLog, logValFrame.vector()); |
847 | |||
848 |
3/6✓ Branch 2 taken 100 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 100 times.
✗ Branch 9 not taken.
|
200 | frame->jacobian(Jframe, q); |
849 |
3/6✓ Branch 2 taken 100 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 100 times.
✗ Branch 9 not taken.
|
200 | logFrame->jacobian(expectedJlogFrame, q); |
850 | |||
851 |
1/2✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
|
200 | JlogFrame = Jframe; |
852 |
4/8✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 100 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 100 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 100 times.
✗ Branch 14 not taken.
|
600 | frame->outputSpace()->dDifference_dq1<hpp::pinocchio::DerivativeTimesInput>( |
853 | 400 | neutral.vector(), valueFrame.vector(), JlogFrame); | |
854 | |||
855 |
11/22✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 100 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 100 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 100 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 100 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 100 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 100 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 100 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 100 times.
✗ Branch 32 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 100 times.
|
200 | EIGEN_IS_APPROX(expectedJlogFrame, JlogFrame); |
856 | 200 | } | |
857 | |||
858 | // Check that the solver can handle constraints with R3xSO3 outputs. | ||
859 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
4 | ImplicitPtr_t constraint(Implicit::create(frame, 6 * Equality)); |
860 | |||
861 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | BySubstitution solver(device->configSpace()); |
862 | 2 | solver.maxIterations(20); | |
863 | 2 | solver.errorThreshold(1e-3); | |
864 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | solver.saturation(hpp::make_shared<saturation::Device>(device)); |
865 | |||
866 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | solver.add(constraint); |
867 | |||
868 |
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 20 not taken.
✓ Branch 21 taken 1 times.
|
2 | BOOST_CHECK_EQUAL(solver.rightHandSideSize(), 7); |
869 | |||
870 |
2/2✓ Branch 0 taken 100 times.
✓ Branch 1 taken 1 times.
|
202 | for (int i = 0; i < 100; ++i) { |
871 |
1/2✓ Branch 3 taken 100 times.
✗ Branch 4 not taken.
|
200 | q = ::pinocchio::randomConfiguration(device->model()), |
872 | |||
873 |
2/4✓ Branch 2 taken 100 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
|
200 | device->currentConfiguration(q); |
874 |
1/2✓ Branch 2 taken 100 times.
✗ Branch 3 not taken.
|
200 | device->computeForwardKinematics(JOINT_POSITION); |
875 |
2/4✓ Branch 2 taken 100 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
|
200 | Transform3s tf_expected(left->currentTransformation()); |
876 |
2/4✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
|
200 | vector_t rhs_expected(7), rhs(7); |
877 |
2/4✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
|
200 | se3ToConfig(tf_expected, rhs_expected); |
878 | |||
879 |
2/4✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
|
200 | solver.rightHandSideFromConfig(q); |
880 |
1/2✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
|
200 | rhs = solver.rightHandSide(); |
881 |
55/108✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 100 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 100 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 100 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 100 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 100 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 100 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 100 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 100 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 100 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 100 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 100 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 100 times.
✗ Branch 44 not taken.
✗ Branch 52 not taken.
✓ Branch 53 taken 100 times.
✓ Branch 55 taken 100 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 100 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 100 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 100 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 100 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 100 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 100 times.
✗ Branch 74 not taken.
✓ Branch 75 taken 66 times.
✓ Branch 76 taken 34 times.
✓ Branch 78 taken 66 times.
✗ Branch 79 not taken.
✓ Branch 82 taken 66 times.
✗ Branch 83 not taken.
✓ Branch 87 taken 66 times.
✗ Branch 88 not taken.
✓ Branch 90 taken 66 times.
✗ Branch 91 not taken.
✓ Branch 93 taken 66 times.
✗ Branch 94 not taken.
✓ Branch 96 taken 66 times.
✗ Branch 97 not taken.
✓ Branch 99 taken 66 times.
✗ Branch 100 not taken.
✓ Branch 102 taken 66 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 66 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 66 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 66 times.
✗ Branch 112 not taken.
✓ Branch 114 taken 66 times.
✗ Branch 115 not taken.
✓ Branch 117 taken 66 times.
✗ Branch 118 not taken.
✓ Branch 120 taken 66 times.
✗ Branch 121 not taken.
✗ Branch 129 not taken.
✓ Branch 130 taken 66 times.
✓ Branch 132 taken 34 times.
✗ Branch 133 not taken.
✓ Branch 136 taken 34 times.
✗ Branch 137 not taken.
✓ Branch 141 taken 34 times.
✗ Branch 142 not taken.
✓ Branch 144 taken 34 times.
✗ Branch 145 not taken.
✓ Branch 147 taken 34 times.
✗ Branch 148 not taken.
✓ Branch 150 taken 34 times.
✗ Branch 151 not taken.
✓ Branch 153 taken 34 times.
✗ Branch 154 not taken.
✓ Branch 156 taken 34 times.
✗ Branch 157 not taken.
✓ Branch 159 taken 34 times.
✗ Branch 160 not taken.
✓ Branch 162 taken 34 times.
✗ Branch 163 not taken.
✓ Branch 165 taken 34 times.
✗ Branch 166 not taken.
✓ Branch 168 taken 34 times.
✗ Branch 169 not taken.
✓ Branch 171 taken 34 times.
✗ Branch 172 not taken.
✓ Branch 174 taken 34 times.
✗ Branch 175 not taken.
✓ Branch 177 taken 34 times.
✗ Branch 178 not taken.
✗ Branch 186 not taken.
✓ Branch 187 taken 34 times.
|
200 | SE3CONFIG_IS_APPROX(rhs_expected, rhs); |
882 |
2/4✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
|
200 | solver.getRightHandSide(constraint, rhs); |
883 |
55/108✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 100 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 100 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 100 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 100 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 100 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 100 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 100 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 100 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 100 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 100 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 100 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 100 times.
✗ Branch 44 not taken.
✗ Branch 52 not taken.
✓ Branch 53 taken 100 times.
✓ Branch 55 taken 100 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 100 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 100 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 100 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 100 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 100 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 100 times.
✗ Branch 74 not taken.
✓ Branch 75 taken 66 times.
✓ Branch 76 taken 34 times.
✓ Branch 78 taken 66 times.
✗ Branch 79 not taken.
✓ Branch 82 taken 66 times.
✗ Branch 83 not taken.
✓ Branch 87 taken 66 times.
✗ Branch 88 not taken.
✓ Branch 90 taken 66 times.
✗ Branch 91 not taken.
✓ Branch 93 taken 66 times.
✗ Branch 94 not taken.
✓ Branch 96 taken 66 times.
✗ Branch 97 not taken.
✓ Branch 99 taken 66 times.
✗ Branch 100 not taken.
✓ Branch 102 taken 66 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 66 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 66 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 66 times.
✗ Branch 112 not taken.
✓ Branch 114 taken 66 times.
✗ Branch 115 not taken.
✓ Branch 117 taken 66 times.
✗ Branch 118 not taken.
✓ Branch 120 taken 66 times.
✗ Branch 121 not taken.
✗ Branch 129 not taken.
✓ Branch 130 taken 66 times.
✓ Branch 132 taken 34 times.
✗ Branch 133 not taken.
✓ Branch 136 taken 34 times.
✗ Branch 137 not taken.
✓ Branch 141 taken 34 times.
✗ Branch 142 not taken.
✓ Branch 144 taken 34 times.
✗ Branch 145 not taken.
✓ Branch 147 taken 34 times.
✗ Branch 148 not taken.
✓ Branch 150 taken 34 times.
✗ Branch 151 not taken.
✓ Branch 153 taken 34 times.
✗ Branch 154 not taken.
✓ Branch 156 taken 34 times.
✗ Branch 157 not taken.
✓ Branch 159 taken 34 times.
✗ Branch 160 not taken.
✓ Branch 162 taken 34 times.
✗ Branch 163 not taken.
✓ Branch 165 taken 34 times.
✗ Branch 166 not taken.
✓ Branch 168 taken 34 times.
✗ Branch 169 not taken.
✓ Branch 171 taken 34 times.
✗ Branch 172 not taken.
✓ Branch 174 taken 34 times.
✗ Branch 175 not taken.
✓ Branch 177 taken 34 times.
✗ Branch 178 not taken.
✗ Branch 186 not taken.
✓ Branch 187 taken 34 times.
|
200 | SE3CONFIG_IS_APPROX(rhs_expected, rhs); |
884 | |||
885 |
2/4✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
|
200 | solver.rightHandSideFromConfig(constraint, q); |
886 |
1/2✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
|
200 | rhs = solver.rightHandSide(); |
887 |
55/108✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 100 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 100 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 100 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 100 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 100 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 100 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 100 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 100 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 100 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 100 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 100 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 100 times.
✗ Branch 44 not taken.
✗ Branch 52 not taken.
✓ Branch 53 taken 100 times.
✓ Branch 55 taken 100 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 100 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 100 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 100 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 100 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 100 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 100 times.
✗ Branch 74 not taken.
✓ Branch 75 taken 66 times.
✓ Branch 76 taken 34 times.
✓ Branch 78 taken 66 times.
✗ Branch 79 not taken.
✓ Branch 82 taken 66 times.
✗ Branch 83 not taken.
✓ Branch 87 taken 66 times.
✗ Branch 88 not taken.
✓ Branch 90 taken 66 times.
✗ Branch 91 not taken.
✓ Branch 93 taken 66 times.
✗ Branch 94 not taken.
✓ Branch 96 taken 66 times.
✗ Branch 97 not taken.
✓ Branch 99 taken 66 times.
✗ Branch 100 not taken.
✓ Branch 102 taken 66 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 66 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 66 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 66 times.
✗ Branch 112 not taken.
✓ Branch 114 taken 66 times.
✗ Branch 115 not taken.
✓ Branch 117 taken 66 times.
✗ Branch 118 not taken.
✓ Branch 120 taken 66 times.
✗ Branch 121 not taken.
✗ Branch 129 not taken.
✓ Branch 130 taken 66 times.
✓ Branch 132 taken 34 times.
✗ Branch 133 not taken.
✓ Branch 136 taken 34 times.
✗ Branch 137 not taken.
✓ Branch 141 taken 34 times.
✗ Branch 142 not taken.
✓ Branch 144 taken 34 times.
✗ Branch 145 not taken.
✓ Branch 147 taken 34 times.
✗ Branch 148 not taken.
✓ Branch 150 taken 34 times.
✗ Branch 151 not taken.
✓ Branch 153 taken 34 times.
✗ Branch 154 not taken.
✓ Branch 156 taken 34 times.
✗ Branch 157 not taken.
✓ Branch 159 taken 34 times.
✗ Branch 160 not taken.
✓ Branch 162 taken 34 times.
✗ Branch 163 not taken.
✓ Branch 165 taken 34 times.
✗ Branch 166 not taken.
✓ Branch 168 taken 34 times.
✗ Branch 169 not taken.
✓ Branch 171 taken 34 times.
✗ Branch 172 not taken.
✓ Branch 174 taken 34 times.
✗ Branch 175 not taken.
✓ Branch 177 taken 34 times.
✗ Branch 178 not taken.
✗ Branch 186 not taken.
✓ Branch 187 taken 34 times.
|
200 | SE3CONFIG_IS_APPROX(rhs_expected, rhs); |
888 | |||
889 |
2/4✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
|
200 | solver.rightHandSide(rhs_expected); |
890 |
1/2✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
|
200 | rhs = solver.rightHandSide(); |
891 |
55/108✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 100 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 100 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 100 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 100 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 100 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 100 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 100 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 100 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 100 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 100 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 100 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 100 times.
✗ Branch 44 not taken.
✗ Branch 52 not taken.
✓ Branch 53 taken 100 times.
✓ Branch 55 taken 100 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 100 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 100 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 100 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 100 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 100 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 100 times.
✗ Branch 74 not taken.
✓ Branch 75 taken 66 times.
✓ Branch 76 taken 34 times.
✓ Branch 78 taken 66 times.
✗ Branch 79 not taken.
✓ Branch 82 taken 66 times.
✗ Branch 83 not taken.
✓ Branch 87 taken 66 times.
✗ Branch 88 not taken.
✓ Branch 90 taken 66 times.
✗ Branch 91 not taken.
✓ Branch 93 taken 66 times.
✗ Branch 94 not taken.
✓ Branch 96 taken 66 times.
✗ Branch 97 not taken.
✓ Branch 99 taken 66 times.
✗ Branch 100 not taken.
✓ Branch 102 taken 66 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 66 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 66 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 66 times.
✗ Branch 112 not taken.
✓ Branch 114 taken 66 times.
✗ Branch 115 not taken.
✓ Branch 117 taken 66 times.
✗ Branch 118 not taken.
✓ Branch 120 taken 66 times.
✗ Branch 121 not taken.
✗ Branch 129 not taken.
✓ Branch 130 taken 66 times.
✓ Branch 132 taken 34 times.
✗ Branch 133 not taken.
✓ Branch 136 taken 34 times.
✗ Branch 137 not taken.
✓ Branch 141 taken 34 times.
✗ Branch 142 not taken.
✓ Branch 144 taken 34 times.
✗ Branch 145 not taken.
✓ Branch 147 taken 34 times.
✗ Branch 148 not taken.
✓ Branch 150 taken 34 times.
✗ Branch 151 not taken.
✓ Branch 153 taken 34 times.
✗ Branch 154 not taken.
✓ Branch 156 taken 34 times.
✗ Branch 157 not taken.
✓ Branch 159 taken 34 times.
✗ Branch 160 not taken.
✓ Branch 162 taken 34 times.
✗ Branch 163 not taken.
✓ Branch 165 taken 34 times.
✗ Branch 166 not taken.
✓ Branch 168 taken 34 times.
✗ Branch 169 not taken.
✓ Branch 171 taken 34 times.
✗ Branch 172 not taken.
✓ Branch 174 taken 34 times.
✗ Branch 175 not taken.
✓ Branch 177 taken 34 times.
✗ Branch 178 not taken.
✗ Branch 186 not taken.
✓ Branch 187 taken 34 times.
|
200 | SE3CONFIG_IS_APPROX(rhs_expected, rhs); |
892 | |||
893 |
2/4✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
|
200 | solver.rightHandSide(constraint, rhs_expected); |
894 |
1/2✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
|
200 | rhs = solver.rightHandSide(); |
895 |
38/108✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 100 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 100 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 100 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 100 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 100 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 100 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 100 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 100 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 100 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 100 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 100 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 100 times.
✗ Branch 44 not taken.
✗ Branch 52 not taken.
✓ Branch 53 taken 100 times.
✓ Branch 55 taken 100 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 100 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 100 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 100 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 100 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 100 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 100 times.
✗ Branch 74 not taken.
✓ Branch 75 taken 100 times.
✗ Branch 76 not taken.
✓ Branch 78 taken 100 times.
✗ Branch 79 not taken.
✓ Branch 82 taken 100 times.
✗ Branch 83 not taken.
✓ Branch 87 taken 100 times.
✗ Branch 88 not taken.
✓ Branch 90 taken 100 times.
✗ Branch 91 not taken.
✓ Branch 93 taken 100 times.
✗ Branch 94 not taken.
✓ Branch 96 taken 100 times.
✗ Branch 97 not taken.
✓ Branch 99 taken 100 times.
✗ Branch 100 not taken.
✓ Branch 102 taken 100 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 100 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 100 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 100 times.
✗ Branch 112 not taken.
✓ Branch 114 taken 100 times.
✗ Branch 115 not taken.
✓ Branch 117 taken 100 times.
✗ Branch 118 not taken.
✓ Branch 120 taken 100 times.
✗ Branch 121 not taken.
✗ Branch 129 not taken.
✓ Branch 130 taken 100 times.
✗ Branch 132 not taken.
✗ Branch 133 not taken.
✗ Branch 136 not taken.
✗ Branch 137 not taken.
✗ Branch 141 not taken.
✗ Branch 142 not taken.
✗ Branch 144 not taken.
✗ Branch 145 not taken.
✗ Branch 147 not taken.
✗ Branch 148 not taken.
✗ Branch 150 not taken.
✗ Branch 151 not taken.
✗ Branch 153 not taken.
✗ Branch 154 not taken.
✗ Branch 156 not taken.
✗ Branch 157 not taken.
✗ Branch 159 not taken.
✗ Branch 160 not taken.
✗ Branch 162 not taken.
✗ Branch 163 not taken.
✗ Branch 165 not taken.
✗ Branch 166 not taken.
✗ Branch 168 not taken.
✗ Branch 169 not taken.
✗ Branch 171 not taken.
✗ Branch 172 not taken.
✗ Branch 174 not taken.
✗ Branch 175 not taken.
✗ Branch 177 not taken.
✗ Branch 178 not taken.
✗ Branch 186 not taken.
✗ Branch 187 not taken.
|
200 | SE3CONFIG_IS_APPROX(rhs_expected, rhs); |
896 | |||
897 |
8/16✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 100 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 100 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 100 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 100 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 100 times.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 100 times.
|
200 | BOOST_CHECK_EQUAL(solver.solve<FixedSequence>(q), BySubstitution::SUCCESS); |
898 | |||
899 | BySubstitution::Status status; | ||
900 |
1/2✓ Branch 0 taken 137 times.
✗ Branch 1 not taken.
|
274 | for (int j = 0; j < 100; ++j) { |
901 |
1/2✓ Branch 3 taken 137 times.
✗ Branch 4 not taken.
|
274 | qrand = ::pinocchio::randomConfiguration(device->model()); |
902 |
3/6✓ Branch 1 taken 137 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 137 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 137 times.
✗ Branch 8 not taken.
|
274 | status = solver.solve<FixedSequence>(qrand); |
903 |
2/2✓ Branch 0 taken 100 times.
✓ Branch 1 taken 37 times.
|
274 | if (status == BySubstitution::SUCCESS) break; |
904 | } | ||
905 |
5/10✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 100 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 100 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 100 times.
|
200 | BOOST_CHECK_EQUAL(status, BySubstitution::SUCCESS); |
906 | |||
907 |
1/2✓ Branch 0 taken 100 times.
✗ Branch 1 not taken.
|
200 | if (status == BySubstitution::SUCCESS) { |
908 |
2/4✓ Branch 2 taken 100 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
|
200 | device->currentConfiguration(qrand); |
909 |
1/2✓ Branch 2 taken 100 times.
✗ Branch 3 not taken.
|
200 | device->computeForwardKinematics(JOINT_POSITION); |
910 |
2/4✓ Branch 2 taken 100 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
|
200 | Transform3s tf_result(left->currentTransformation()); |
911 | |||
912 |
1/2✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
|
200 | Transform3s id = tf_expected.actInv(tf_result); |
913 |
12/24✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 100 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 100 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 100 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 100 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 100 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 100 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 100 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 100 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 100 times.
✗ Branch 35 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 100 times.
|
200 | BOOST_CHECK_MESSAGE(id.isIdentity(1e-3), "Right hand side is different:\n" |
914 | << tf_result << '\n' | ||
915 | << tf_expected << '\n' | ||
916 | << id); | ||
917 | } | ||
918 | 200 | } | |
919 | 2 | } | |
920 | |||
921 |
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(rightHandSide) { |
922 |
2/2✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 1 times.
|
2002 | for (size_type i = 0; i < 1000; ++i) { |
923 | 2000 | size_type N(10); | |
924 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | matrix_t A(randomPositiveDefiniteMatrix((int)N)); |
925 |
3/6✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1000 times.
✗ Branch 9 not taken.
|
4000 | AffineFunctionPtr_t affine(AffineFunction::create(A)); |
926 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | vector_t b(vector_t::Random(N)); |
927 |
1/2✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
|
2000 | ComparisonTypes_t comp(N, Equality); |
928 | 2000 | comp[1] = comp[3] = comp[5] = comp[6] = EqualToZero; | |
929 |
4/8✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1000 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1000 times.
✗ Branch 11 not taken.
|
2000 | b[1] = b[3] = b[5] = b[6] = 0; |
930 | |||
931 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | BySubstitution solver(LiegroupSpace::Rn(N)); |
932 | 2000 | solver.maxIterations(20); | |
933 | 2000 | solver.errorThreshold(test_precision); | |
934 | // Create constraint with various comparison types | ||
935 |
3/6✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1000 times.
✗ Branch 7 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
|
4000 | ImplicitPtr_t constraint(Implicit::create(affine, comp)); |
936 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | solver.add(constraint); |
937 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | solver.rightHandSide(constraint, b); |
938 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | vector_t b1(N); |
939 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | solver.getRightHandSide(constraint, b1); |
940 |
7/14✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1000 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1000 times.
|
2000 | BOOST_CHECK(b == b1); |
941 | // Check resolution | ||
942 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | vector_t x(vector_t::Random(N)); |
943 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | solver.solve(x); |
944 |
3/6✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1000 times.
✗ Branch 8 not taken.
|
2000 | vector_t error(A * x - b); |
945 |
14/28✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1000 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1000 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1000 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1000 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1000 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1000 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1000 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1000 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1000 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1000 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1000 times.
✗ Branch 41 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 1000 times.
|
2000 | BOOST_CHECK_MESSAGE(error.norm() < test_precision, |
946 | "Error threshold exceeded. Error is " | ||
947 | << error.transpose() << ", norm " << error.norm() | ||
948 | << ". Precision is " << test_precision); | ||
949 | 2000 | } | |
950 | 2 | } | |
951 | |||
952 |
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(rightHandSideFromConfig) { |
953 | // Create a kinematic chain | ||
954 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
4 | DevicePtr_t device = hpp::pinocchio::unittest::makeDevice(HumanoidSimple); |
955 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | JointPtr_t root = device->rootJoint(), |
956 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | ee1 = device->getJointByName("lleg5_joint"), |
957 |
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"); |
958 |
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); |
959 | |||
960 |
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.
|
4 | ComparisonTypes_t comp1(EqualToZero << Equality << EqualToZero << Equality |
961 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | << EqualToZero << Equality); |
962 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
2 | assert(comp1[0] == EqualToZero); |
963 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
2 | assert(comp1[2] == EqualToZero); |
964 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
2 | assert(comp1[4] == EqualToZero); |
965 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
2 | ComparisonTypes_t comp2(2 * Equality << 2 * EqualToZero << 2 * Equality); |
966 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
2 | assert(comp2[0] == Equality); |
967 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
2 | assert(comp2[1] == Equality); |
968 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
2 | assert(comp2[2] == EqualToZero); |
969 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
2 | assert(comp2[3] == EqualToZero); |
970 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
2 | assert(comp2[4] == Equality); |
971 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
2 | assert(comp2[5] == Equality); |
972 | // Create two relative transformation constraints | ||
973 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Transform3s tf1(Transform3s::Identity()); |
974 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | vector3_t u; |
975 |
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 | u << 0, -.2, 0; |
976 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Transform3s tf2(Transform3s::Identity()); |
977 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | tf2.translation(u); |
978 | |||
979 | DifferentiableFunctionPtr_t h( | ||
980 |
2/4✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
4 | RelativeTransformation::create("RelativeTransformation", device, ee1, ee2, |
981 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
6 | tf1, tf2, std::vector<bool>(6, true))); |
982 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
4 | ImplicitPtr_t c1(Implicit::create(h, comp1)); |
983 |
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 | u << 1.2, 0, -1; |
984 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | tf2.translation(u); |
985 |
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.
|
8 | ImplicitPtr_t c2(hpp::constraints::explicit_::RelativePose::create( |
986 | 4 | "Transformation", device, JointPtr_t(), root, tf2, tf1, comp2, | |
987 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
6 | std::vector<bool>(6, true))); |
988 | |||
989 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | BySubstitution solver(device->configSpace()); |
990 | 2 | solver.maxIterations(20); | |
991 | 2 | solver.errorThreshold(test_precision); | |
992 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | solver.add(c1); |
993 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | solver.add(c2); |
994 | // 0 | ||
995 | // rhs [1] | ||
996 | // f1 (q) = 0 | ||
997 | // rhs [3] | ||
998 | // 0 | ||
999 | // rhs [5] | ||
1000 | // | ||
1001 | // rhs [6] | ||
1002 | // 0 | ||
1003 | // f2 (q) = 0 | ||
1004 | // rhs [9] | ||
1005 | // rhs [10] | ||
1006 | // rhs [11] | ||
1007 | // rhs [12] | ||
1008 |
2/2✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 1 times.
|
2002 | for (size_type i = 0; i < 1000; ++i) { |
1009 |
1/2✓ Branch 3 taken 1000 times.
✗ Branch 4 not taken.
|
2000 | Configuration_t q = ::pinocchio::randomConfiguration(device->model()); |
1010 | bool success; | ||
1011 | // Set right hand side for both constraints from random configuration | ||
1012 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | success = solver.rightHandSideFromConfig(c1, q); |
1013 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(success); |
1014 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | success = solver.rightHandSideFromConfig(c2, q); |
1015 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(success); |
1016 | // Store right hand side for each constraint | ||
1017 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | vector_t rhs1(6); |
1018 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | rhs1.setZero(); |
1019 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | vector_t rhs1_(6); |
1020 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | rhs1_.setZero(); |
1021 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | vector_t rhs2(7); |
1022 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | rhs2.setZero(); |
1023 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | vector_t rhs2_(7); |
1024 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | rhs2_.setZero(); |
1025 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | success = solver.getRightHandSide(c1, rhs1); |
1026 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(success); |
1027 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | success = solver.getRightHandSide(c2, rhs2); |
1028 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(success); |
1029 | // Set right hand side for both constraints from other random configuration | ||
1030 |
1/2✓ Branch 3 taken 1000 times.
✗ Branch 4 not taken.
|
2000 | q = ::pinocchio::randomConfiguration(device->model()); |
1031 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | success = solver.rightHandSideFromConfig(c1, q); |
1032 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(success); |
1033 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | success = solver.rightHandSideFromConfig(c2, q); |
1034 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(success); |
1035 | // Set right hand side from stored values | ||
1036 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | success = solver.rightHandSide(c1, rhs1); |
1037 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(success); |
1038 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | success = solver.rightHandSide(c2, rhs2); |
1039 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(success); |
1040 | // Get right hand side for each constraint and compare to stored values | ||
1041 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | success = solver.getRightHandSide(c1, rhs1_); |
1042 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(success); |
1043 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | success = solver.getRightHandSide(c2, rhs2_); |
1044 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(success); |
1045 |
8/16✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1000 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1000 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1000 times.
|
2000 | BOOST_CHECK((rhs1 - rhs1_).norm() < 1e-10); |
1046 |
8/16✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1000 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1000 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1000 times.
|
2000 | BOOST_CHECK((rhs2 - rhs2_).norm() < 1e-10); |
1047 | 2000 | } | |
1048 | 2 | } | |
1049 | |||
1050 |
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(merge) { |
1051 | // Create a kinematic chain | ||
1052 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
4 | DevicePtr_t device = hpp::pinocchio::unittest::makeDevice(HumanoidSimple); |
1053 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | JointPtr_t root = device->rootJoint(), |
1054 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | ee1 = device->getJointByName("lleg5_joint"), |
1055 |
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"); |
1056 |
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); |
1057 |
2/4✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | Configuration_t q(device->configSpace()->neutral().vector()); |
1058 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | ComparisonTypes_t comp1(6 * Equality); |
1059 | 2 | comp1[0] = comp1[2] = comp1[4] = EqualToZero; | |
1060 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | ComparisonTypes_t comp2(6 * Equality); |
1061 | 2 | comp2[1] = comp2[2] = EqualToZero; | |
1062 | // Create two relative transformation constraints | ||
1063 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Transform3s tf1(Transform3s::Identity()); |
1064 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | vector3_t u; |
1065 |
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 | u << 0, -.2, 0; |
1066 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Transform3s tf2(Transform3s::Identity()); |
1067 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | tf2.translation(u); |
1068 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
4 | DifferentiableFunctionPtr_t h(RelativeTransformation::create( |
1069 | 2 | "RelativeTransformation", device, ee1, ee2, tf1, tf2)); | |
1070 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
4 | ImplicitPtr_t c1(Implicit::create(h, comp1)); |
1071 |
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 | u << 1.2, 0, -1; |
1072 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | tf2.translation(u); |
1073 | ImplicitPtr_t c2( | ||
1074 |
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())); |
1075 | |||
1076 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
8 | ImplicitPtr_t c3(hpp::constraints::explicit_::RelativePose::create( |
1077 | 6 | "Transformation root", device, JointPtr_t(), root, tf2, tf1, comp2)); | |
1078 | |||
1079 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | BySubstitution solver1(device->configSpace()); |
1080 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | BySubstitution solver2(device->configSpace()); |
1081 | 2 | solver1.maxIterations(20); | |
1082 | 2 | solver1.errorThreshold(test_precision); | |
1083 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | solver1.add(c1->copy()); |
1084 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | solver1.add(c2->copy()); |
1085 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | solver2.add(c1->copy()); |
1086 |
3/6✓ 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.
|
2 | solver2.add(c3->copy()); |
1087 | // copy and merge solvers | ||
1088 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | BySubstitution solver3(solver1); |
1089 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | BySubstitution solver4(solver2); |
1090 | |||
1091 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | solver3.merge(solver4); |
1092 | |||
1093 |
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 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
|
2 | BOOST_CHECK(solver3.numericalConstraints().size() == 3); |
1094 |
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(solver3.contains(c1)); |
1095 |
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(solver3.contains(c2)); |
1096 |
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(solver3.contains(c3)); |
1097 |
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 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(solver3.rightHandSideFromConfig(c1, q)); |
1098 |
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 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(solver3.rightHandSideFromConfig(c2, q)); |
1099 |
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 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(solver3.rightHandSideFromConfig(c3, q)); |
1100 | |||
1101 | // Check computation of errors by constraint | ||
1102 | // order is c1 c2 c3 | ||
1103 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | vector_t error(solver3.errorSize()); |
1104 |
1/2✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | vector_t error1(c1->function().outputSpace()->nv()); |
1105 |
1/2✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | vector_t error2(c2->function().outputSpace()->nv()); |
1106 |
1/2✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | vector_t error3(c3->function().outputSpace()->nv()); |
1107 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
|
6 | for (int i = 0; i < 2; ++i) { |
1108 |
3/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
|
4 | bool satisfied(solver3.isSatisfied(q, error)); |
1109 | bool found; | ||
1110 |
3/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
|
4 | bool satisfied1(solver3.isConstraintSatisfied(c1, q, error1, found)); |
1111 |
6/12✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
|
4 | BOOST_CHECK(found); |
1112 |
3/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
|
4 | bool satisfied2(solver3.isConstraintSatisfied(c2, q, error2, found)); |
1113 |
6/12✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
|
4 | BOOST_CHECK(found); |
1114 |
3/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
|
4 | bool satisfied3(solver3.isConstraintSatisfied(c3, q, error3, found)); |
1115 |
6/12✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
|
4 | BOOST_CHECK(found); |
1116 |
6/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 2 times.
|
4 | BOOST_CHECK_EQUAL(satisfied, (satisfied1 && satisfied2 && satisfied3)); |
1117 | 4 | size_type row = 0, nRows = error1.size(); | |
1118 |
8/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
|
4 | BOOST_CHECK(error1 == error.segment(row, nRows)); |
1119 | 4 | row += nRows; | |
1120 | 4 | nRows = error2.size(); | |
1121 |
8/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
|
4 | BOOST_CHECK(error2 == error.segment(row, nRows)); |
1122 | 4 | row += nRows; | |
1123 | 4 | nRows = error3.size(); | |
1124 |
8/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
|
4 | BOOST_CHECK(error3 == error.segment(row, nRows)); |
1125 | |||
1126 |
1/2✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
|
4 | q = ::pinocchio::randomConfiguration(device->model()); |
1127 | } | ||
1128 | |||
1129 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | BySubstitution solver5(device->configSpace()); |
1130 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | solver5.add(c3); |
1131 |
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 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 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 1 times.
|
2 | BOOST_CHECK(solver5.contains(c3->copy())); |
1132 | 2 | } | |
1133 |