| 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 |