| Directory: | ./ |
|---|---|
| File: | tests/gjk.cc |
| Date: | 2025-05-05 12:19:30 |
| Exec | Total | Coverage | |
|---|---|---|---|
| Lines: | 228 | 242 | 94.2% |
| Branches: | 299 | 758 | 39.4% |
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | |||
| 2 | #include <hpp/constraints/solver/hierarchical-iterative.hh> | ||
| 3 | #include <hpp/constraints/symbolic-function.hh> | ||
| 4 | #include <hpp/pinocchio/util.hh> | ||
| 5 | #include <sstream> | ||
| 6 | |||
| 7 | using namespace hpp::constraints; | ||
| 8 | |||
| 9 | // This unit test was used to write function | ||
| 10 | // coal::details::GJK::projectTetrahedraOrigin. | ||
| 11 | |||
| 12 | #define DECLARE_EXPRESSION(Class) typedef typename Traits<Class>::Ptr_t Ptr_t; | ||
| 13 | |||
| 14 | #define HPP_CONSTRAINTS_CB_CREATE0(Class) \ | ||
| 15 | static typename Traits<Class>::Ptr_t create() { \ | ||
| 16 | typename Traits<Class>::Ptr_t ptr(new Class()); \ | ||
| 17 | ptr->init(ptr); \ | ||
| 18 | return ptr; \ | ||
| 19 | } | ||
| 20 | |||
| 21 | static const int Nv = 9; | ||
| 22 | typedef Eigen::Matrix<value_type, Nv, 1> vector9_t; | ||
| 23 | typedef solver::lineSearch::Backtracking LineSearch_t; | ||
| 24 | using hpp::one_line; | ||
| 25 | using hpp::setpyformat; | ||
| 26 | using hpp::shared_ptr; | ||
| 27 | using hpp::constraints::solver::HierarchicalIterative; | ||
| 28 | |||
| 29 | namespace hpp { | ||
| 30 | namespace constraints { | ||
| 31 | |||
| 32 | class PointA; | ||
| 33 | class PointB; | ||
| 34 | class PointC; | ||
| 35 | class PointD; | ||
| 36 | |||
| 37 | class PointB : public CalculusBase<PointB, vector3_t, JacobianMatrix> { | ||
| 38 | public: | ||
| 39 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | HPP_CONSTRAINTS_CB_CREATE0(PointB) |
| 40 | DECLARE_EXPRESSION(PointB) | ||
| 41 | |||
| 42 | PointB(const CalculusBase<PointB, vector3_t, JacobianMatrix>& other) | ||
| 43 | : CalculusBase<PointB, eigen::vector3_t, JacobianMatrix>(other) {} | ||
| 44 | |||
| 45 | PointB(const PointB& point) | ||
| 46 | : CalculusBase<PointB, vector3_t, JacobianMatrix>(point) {} | ||
| 47 | |||
| 48 | 1 | PointB() : CalculusBase<PointB, vector3_t, JacobianMatrix>() { | |
| 49 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | this->jacobian_.resize(3, Nv); |
| 50 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | this->jacobian_.rightCols<3>().setIdentity(); |
| 51 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | this->jacobian_.leftCols<Nv - 3>().setZero(); |
| 52 | 1 | } | |
| 53 | |||
| 54 |
1/2✓ Branch 2 taken 1532 times.
✗ Branch 3 not taken.
|
1532 | void impl_value(const ConfigurationIn_t x) { this->value_ = x.head<3>(); } |
| 55 | 484 | void impl_jacobian(const ConfigurationIn_t) {} | |
| 56 | }; | ||
| 57 | |||
| 58 | class PointC : public CalculusBase<PointC, vector3_t, JacobianMatrix> { | ||
| 59 | public: | ||
| 60 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | HPP_CONSTRAINTS_CB_CREATE0(PointC) |
| 61 | DECLARE_EXPRESSION(PointC) | ||
| 62 | |||
| 63 | PointC(const CalculusBase<PointC, vector3_t, JacobianMatrix>& other) | ||
| 64 | : CalculusBase<PointC, eigen::vector3_t, JacobianMatrix>(other) {} | ||
| 65 | |||
| 66 | PointC(const PointC& point) | ||
| 67 | : CalculusBase<PointC, vector3_t, JacobianMatrix>(point) {} | ||
| 68 | |||
| 69 | 1 | PointC() : CalculusBase<PointC, vector3_t, JacobianMatrix>() { | |
| 70 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | this->jacobian_.resize(3, Nv); |
| 71 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | this->jacobian_.rightCols<3>().setIdentity(); |
| 72 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | this->jacobian_.leftCols<Nv - 3>().setZero(); |
| 73 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | this->jacobian_(0, 3) = 1.; |
| 74 | 1 | } | |
| 75 | |||
| 76 | 1527 | void impl_value(const ConfigurationIn_t x) { | |
| 77 |
1/2✓ Branch 2 taken 1527 times.
✗ Branch 3 not taken.
|
1527 | this->value_ = x.head<3>(); |
| 78 | 1527 | this->value_[0] += x[3]; | |
| 79 | 1527 | } | |
| 80 | 482 | void impl_jacobian(const ConfigurationIn_t) {} | |
| 81 | }; | ||
| 82 | |||
| 83 | class PointD : public CalculusBase<PointD, vector3_t, JacobianMatrix> { | ||
| 84 | public: | ||
| 85 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | HPP_CONSTRAINTS_CB_CREATE0(PointD) |
| 86 | DECLARE_EXPRESSION(PointD) | ||
| 87 | |||
| 88 | PointD(const CalculusBase<PointD, vector3_t, JacobianMatrix>& other) | ||
| 89 | : CalculusBase<PointD, eigen::vector3_t, JacobianMatrix>(other) {} | ||
| 90 | |||
| 91 | PointD(const PointD& point) | ||
| 92 | : CalculusBase<PointD, vector3_t, JacobianMatrix>(point) {} | ||
| 93 | |||
| 94 | 1 | PointD() : CalculusBase<PointD, vector3_t, JacobianMatrix>() { | |
| 95 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | this->jacobian_.resize(3, Nv); |
| 96 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | this->jacobian_.setZero(); |
| 97 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | this->jacobian_(0, 0) = 1.; |
| 98 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | this->jacobian_(0, 4) = 1.; |
| 99 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | this->jacobian_(1, 5) = 1.; |
| 100 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | this->jacobian_(2, 2) = 1.; |
| 101 | 1 | } | |
| 102 | |||
| 103 | 771 | void impl_value(const ConfigurationIn_t x) { | |
| 104 |
5/10✓ Branch 3 taken 771 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 771 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 771 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 771 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 771 times.
✗ Branch 16 not taken.
|
771 | this->value_ << x[0] + x[4], x[5], x[2]; |
| 105 | 771 | } | |
| 106 | 244 | void impl_jacobian(const ConfigurationIn_t) {} | |
| 107 | }; | ||
| 108 | |||
| 109 | class PointA : public CalculusBase<PointA, vector3_t, JacobianMatrix> { | ||
| 110 | public: | ||
| 111 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | HPP_CONSTRAINTS_CB_CREATE0(PointA) |
| 112 | DECLARE_EXPRESSION(PointA) | ||
| 113 | |||
| 114 | PointA(const CalculusBase<PointA, vector3_t, JacobianMatrix>& other) | ||
| 115 | : CalculusBase<PointA, eigen::vector3_t, JacobianMatrix>(other) {} | ||
| 116 | |||
| 117 | PointA(const PointA& point) | ||
| 118 | : CalculusBase<PointA, vector3_t, JacobianMatrix>(point) {} | ||
| 119 | |||
| 120 | 1 | PointA() : CalculusBase<PointA, vector3_t, JacobianMatrix>() { | |
| 121 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | this->jacobian_.resize(3, Nv); |
| 122 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | this->jacobian_.rightCols<Nv - 3>().setIdentity(); |
| 123 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | this->jacobian_.leftCols<3>().setZero(); |
| 124 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | this->jacobian_(2, 2) = 1.; |
| 125 | 1 | } | |
| 126 | |||
| 127 | 1147 | void impl_value(const ConfigurationIn_t x) { | |
| 128 |
1/2✓ Branch 2 taken 1147 times.
✗ Branch 3 not taken.
|
1147 | this->value_ = x.tail<3>(); |
| 129 | 1147 | this->value_[2] += x[2]; | |
| 130 | 1147 | } | |
| 131 | 362 | void impl_jacobian(const ConfigurationIn_t) {} | |
| 132 | }; | ||
| 133 | |||
| 134 | } // namespace constraints | ||
| 135 | } // namespace hpp | ||
| 136 | |||
| 137 | typedef Difference<PointB, PointA> AB_t; | ||
| 138 | typedef Difference<PointC, PointA> AC_t; | ||
| 139 | typedef Difference<PointD, PointA> AD_t; | ||
| 140 | |||
| 141 | typedef ScalarProduct<AB_t, PointA> AB_OA_t; | ||
| 142 | typedef ScalarProduct<AC_t, PointA> AC_OA_t; | ||
| 143 | typedef ScalarProduct<AD_t, PointA> AD_OA_t; | ||
| 144 | |||
| 145 | typedef CrossProduct<AB_t, AC_t> ABC_t; | ||
| 146 | typedef CrossProduct<AC_t, AD_t> ACD_t; | ||
| 147 | typedef CrossProduct<AD_t, AB_t> ADB_t; | ||
| 148 | |||
| 149 | typedef ScalarProduct<ABC_t, PointA> ABC_OA_t; | ||
| 150 | typedef ScalarProduct<ACD_t, PointA> ACD_OA_t; | ||
| 151 | typedef ScalarProduct<ADB_t, PointA> ADB_OA_t; | ||
| 152 | |||
| 153 | typedef CrossProduct<ABC_t, AB_t> ABC_AB_t; | ||
| 154 | typedef CrossProduct<ABC_t, AC_t> ABC_AC_t; | ||
| 155 | typedef CrossProduct<ACD_t, AC_t> ACD_AC_t; | ||
| 156 | typedef CrossProduct<ACD_t, AD_t> ACD_AD_t; | ||
| 157 | typedef CrossProduct<ADB_t, AD_t> ADB_AD_t; | ||
| 158 | typedef CrossProduct<ADB_t, AB_t> ADB_AB_t; | ||
| 159 | |||
| 160 | typedef ScalarProduct<ABC_AB_t, PointA> ABC_AB_OA_t; | ||
| 161 | typedef ScalarProduct<ABC_AC_t, PointA> ABC_AC_OA_t; | ||
| 162 | typedef ScalarProduct<ACD_AC_t, PointA> ACD_AC_OA_t; | ||
| 163 | typedef ScalarProduct<ACD_AD_t, PointA> ACD_AD_OA_t; | ||
| 164 | typedef ScalarProduct<ADB_AD_t, PointA> ADB_AD_OA_t; | ||
| 165 | typedef ScalarProduct<ADB_AB_t, PointA> ADB_AB_OA_t; | ||
| 166 | |||
| 167 | // ComparisonTypes_t negative (1, Inferior); | ||
| 168 | |||
| 169 | template <typename Expression> | ||
| 170 | 52 | ImplicitPtr_t implicitConstraint(const std::string& name, | |
| 171 | const shared_ptr<Expression>& expr, | ||
| 172 | ComparisonTypes_t comp) { | ||
| 173 | typedef SymbolicFunction<Expression> SF_t; | ||
| 174 |
3/6✓ Branch 2 taken 26 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 26 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 26 times.
✗ Branch 11 not taken.
|
52 | return Implicit::create(SF_t::create(name, Nv, Nv, 1, expr), comp); |
| 175 | } | ||
| 176 | |||
| 177 | struct Data { | ||
| 178 | PointA::Ptr_t A; | ||
| 179 | PointB::Ptr_t B; | ||
| 180 | PointC::Ptr_t C; | ||
| 181 | PointD::Ptr_t D; | ||
| 182 | |||
| 183 | shared_ptr<AB_t> AB; | ||
| 184 | shared_ptr<AC_t> AC; | ||
| 185 | shared_ptr<AD_t> AD; | ||
| 186 | |||
| 187 | shared_ptr<AB_OA_t> AB_OA; | ||
| 188 | shared_ptr<AC_OA_t> CB_OA; | ||
| 189 | shared_ptr<AD_OA_t> DB_OA; | ||
| 190 | |||
| 191 | shared_ptr<ABC_t> ABC; | ||
| 192 | shared_ptr<ACD_t> ACD; | ||
| 193 | shared_ptr<ADB_t> ADB; | ||
| 194 | |||
| 195 | shared_ptr<ABC_OA_t> ABC_OA; | ||
| 196 | shared_ptr<ACD_OA_t> ACD_OA; | ||
| 197 | shared_ptr<ADB_OA_t> ADB_OA; | ||
| 198 | |||
| 199 | shared_ptr<ABC_AB_t> ABC_AB; | ||
| 200 | shared_ptr<ABC_AC_t> ABC_AC; | ||
| 201 | shared_ptr<ACD_AC_t> ACD_AC; | ||
| 202 | shared_ptr<ACD_AD_t> ACD_AD; | ||
| 203 | shared_ptr<ADB_AD_t> ADB_AD; | ||
| 204 | shared_ptr<ADB_AB_t> ADB_AB; | ||
| 205 | |||
| 206 | shared_ptr<ABC_AB_OA_t> ABC_AB_OA; | ||
| 207 | shared_ptr<ABC_AC_OA_t> ABC_AC_OA; | ||
| 208 | shared_ptr<ACD_AC_OA_t> ACD_AC_OA; | ||
| 209 | shared_ptr<ACD_AD_OA_t> ACD_AD_OA; | ||
| 210 | shared_ptr<ADB_AD_OA_t> ADB_AD_OA; | ||
| 211 | shared_ptr<ADB_AB_OA_t> ADB_AB_OA; | ||
| 212 | |||
| 213 | ImplicitPtr_t c0_AB_OA, c0_CB_OA, c0_DB_OA, c1_AB_OA, c1_CB_OA, c1_DB_OA, | ||
| 214 | c0_ABC_OA, c0_ACD_OA, c0_ADB_OA, c1_ABC_OA, c1_ACD_OA, c1_ADB_OA, | ||
| 215 | c0_ABC_AB_OA, c0_ABC_AC_OA, c1_ABC_AB_OA, c1_ABC_AC_OA, c0_ACD_AC_OA, | ||
| 216 | c0_ACD_AD_OA, c1_ACD_AC_OA, c1_ACD_AD_OA, c0_ADB_AD_OA, c0_ADB_AB_OA, | ||
| 217 | c1_ADB_AD_OA, c1_ADB_AB_OA; | ||
| 218 | ImplicitPtr_t a[12]; | ||
| 219 | ImplicitPtr_t not_a[12]; | ||
| 220 | |||
| 221 | ImplicitPtr_t O_inside_1, O_inside_2; | ||
| 222 | |||
| 223 | 1 | Data() { | |
| 224 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | A = (PointA::create()); |
| 225 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | B = (PointB::create()); |
| 226 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | C = (PointC::create()); |
| 227 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | D = (PointD::create()); |
| 228 | |||
| 229 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | AB = (B - A); |
| 230 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | AC = (C - A); |
| 231 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | AD = (D - A); |
| 232 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | AB_OA = (AB * A); |
| 233 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CB_OA = (AC * A); |
| 234 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | DB_OA = (AD * A); |
| 235 | |||
| 236 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ABC = (AB ^ AC); |
| 237 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ACD = (AC ^ AD); |
| 238 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ADB = (AD ^ AB); |
| 239 | |||
| 240 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ABC_OA = (ABC * A); |
| 241 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ACD_OA = (ACD * A); |
| 242 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ADB_OA = (ADB * A); |
| 243 | |||
| 244 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ABC_AB = (ABC ^ AB); |
| 245 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ABC_AC = (ABC ^ AC); |
| 246 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ACD_AC = (ACD ^ AC); |
| 247 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ACD_AD = (ACD ^ AD); |
| 248 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ADB_AD = (ADB ^ AD); |
| 249 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ADB_AB = (ADB ^ AB); |
| 250 | |||
| 251 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ABC_AB_OA = (ABC_AB * A); |
| 252 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ABC_AC_OA = (ABC_AC * A); |
| 253 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ACD_AC_OA = (ACD_AC * A); |
| 254 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ACD_AD_OA = (ACD_AD * A); |
| 255 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ADB_AD_OA = (ADB_AD * A); |
| 256 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ADB_AB_OA = (ADB_AB * A); |
| 257 | |||
| 258 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | ComparisonTypes_t negative(1, Inferior); |
| 259 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | ComparisonTypes_t positive(1, Superior); |
| 260 | |||
| 261 |
3/6✓ 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.
|
1 | c1_AB_OA = implicitConstraint("AB.AO >= 0", AB_OA, negative); |
| 262 |
3/6✓ 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.
|
1 | c1_CB_OA = implicitConstraint("CB.AO >= 0", CB_OA, negative); |
| 263 |
3/6✓ 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.
|
1 | c1_DB_OA = implicitConstraint("DB.AO >= 0", DB_OA, negative); |
| 264 |
3/6✓ 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.
|
1 | c1_ABC_OA = implicitConstraint("ABC.AO >= 0", ABC_OA, negative); |
| 265 |
3/6✓ 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.
|
1 | c1_ACD_OA = implicitConstraint("ACD.AO >= 0", ACD_OA, negative); |
| 266 |
3/6✓ 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.
|
1 | c1_ADB_OA = implicitConstraint("ADB.AO >= 0", ADB_OA, negative); |
| 267 |
3/6✓ 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.
|
1 | c1_ABC_AB_OA = implicitConstraint("ABC^AB.AO >= 0", ABC_AB_OA, negative); |
| 268 |
3/6✓ 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.
|
1 | c1_ABC_AC_OA = implicitConstraint("ABC^AC.AO >= 0", ABC_AC_OA, negative); |
| 269 |
3/6✓ 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.
|
1 | c1_ACD_AC_OA = implicitConstraint("ACD^AC.AO >= 0", ACD_AC_OA, negative); |
| 270 |
3/6✓ 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.
|
1 | c1_ACD_AD_OA = implicitConstraint("ACD^AD.AO >= 0", ACD_AD_OA, negative); |
| 271 |
3/6✓ 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.
|
1 | c1_ADB_AD_OA = implicitConstraint("ADB^AD.AO >= 0", ADB_AD_OA, negative); |
| 272 |
3/6✓ 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.
|
1 | c1_ADB_AB_OA = implicitConstraint("ADB^AB.AO >= 0", ADB_AB_OA, negative); |
| 273 | |||
| 274 |
3/6✓ 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.
|
1 | c0_AB_OA = implicitConstraint("AB.AO <= 0", AB_OA, positive); |
| 275 |
3/6✓ 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.
|
1 | c0_CB_OA = implicitConstraint("CB.AO <= 0", CB_OA, positive); |
| 276 |
3/6✓ 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.
|
1 | c0_DB_OA = implicitConstraint("DB.AO <= 0", DB_OA, positive); |
| 277 |
3/6✓ 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.
|
1 | c0_ABC_OA = implicitConstraint("ABC.AO <= 0", ABC_OA, positive); |
| 278 |
3/6✓ 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.
|
1 | c0_ACD_OA = implicitConstraint("ACD.AO <= 0", ACD_OA, positive); |
| 279 |
3/6✓ 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.
|
1 | c0_ADB_OA = implicitConstraint("ADB.AO <= 0", ADB_OA, positive); |
| 280 |
3/6✓ 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.
|
1 | c0_ABC_AB_OA = implicitConstraint("ABC^AB.AO <= 0", ABC_AB_OA, positive); |
| 281 |
3/6✓ 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.
|
1 | c0_ABC_AC_OA = implicitConstraint("ABC^AC.AO <= 0", ABC_AC_OA, positive); |
| 282 |
3/6✓ 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.
|
1 | c0_ACD_AC_OA = implicitConstraint("ACD^AC.AO <= 0", ACD_AC_OA, positive); |
| 283 |
3/6✓ 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.
|
1 | c0_ACD_AD_OA = implicitConstraint("ACD^AD.AO <= 0", ACD_AD_OA, positive); |
| 284 |
3/6✓ 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.
|
1 | c0_ADB_AD_OA = implicitConstraint("ADB^AD.AO <= 0", ADB_AD_OA, positive); |
| 285 |
3/6✓ 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.
|
1 | c0_ADB_AB_OA = implicitConstraint("ADB^AB.AO <= 0", ADB_AB_OA, positive); |
| 286 | |||
| 287 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | shared_ptr<Point> z = Point::create(vector3_t(0, 0, 1), Nv); |
| 288 | O_inside_1 = | ||
| 289 |
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 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
|
1 | implicitConstraint("BD^z.OB >= 0", ((D - B) ^ z) * B, negative); |
| 290 | O_inside_2 = | ||
| 291 |
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 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
|
1 | implicitConstraint("CD^z.OC <= 0", ((D - C) ^ z) * C, positive); |
| 292 | |||
| 293 | 1 | a[0] = c1_ABC_OA; | |
| 294 | 1 | a[1] = c1_ACD_OA; | |
| 295 | 1 | a[2] = c1_ADB_OA; | |
| 296 | 1 | a[3] = c1_ABC_AB_OA; | |
| 297 | 1 | a[4] = c1_ABC_AC_OA; | |
| 298 | 1 | a[5] = c1_ACD_AC_OA; | |
| 299 | 1 | a[6] = c1_ACD_AD_OA; | |
| 300 | 1 | a[7] = c1_ADB_AD_OA; | |
| 301 | 1 | a[8] = c1_ADB_AB_OA; | |
| 302 | 1 | a[9] = c1_AB_OA; | |
| 303 | 1 | a[10] = c1_CB_OA; | |
| 304 | 1 | a[11] = c1_DB_OA; | |
| 305 | |||
| 306 | 1 | not_a[0] = c0_ABC_OA; | |
| 307 | 1 | not_a[1] = c0_ACD_OA; | |
| 308 | 1 | not_a[2] = c0_ADB_OA; | |
| 309 | 1 | not_a[3] = c0_ABC_AB_OA; | |
| 310 | 1 | not_a[4] = c0_ABC_AC_OA; | |
| 311 | 1 | not_a[5] = c0_ACD_AC_OA; | |
| 312 | 1 | not_a[6] = c0_ACD_AD_OA; | |
| 313 | 1 | not_a[7] = c0_ADB_AD_OA; | |
| 314 | 1 | not_a[8] = c0_ADB_AB_OA; | |
| 315 | 1 | not_a[9] = c0_AB_OA; | |
| 316 | 1 | not_a[10] = c0_CB_OA; | |
| 317 | 1 | not_a[11] = c0_DB_OA; | |
| 318 |
0/8✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1 | } |
| 319 | }; | ||
| 320 | |||
| 321 | #define CHECK_MSG(cond, msg) \ | ||
| 322 | if (!(cond)) \ | ||
| 323 | std::cerr << __FILE__ ":" << __LINE__ << ": " << msg << ": failed" \ | ||
| 324 | << std::endl; | ||
| 325 | #define CHECK_EQUAL(a, b) \ | ||
| 326 | CHECK_MSG(a == b, #a " (" << a << ") == " #b " (" << b << ")") | ||
| 327 | #define CHECK(cond) CHECK_MSG(cond, #cond) | ||
| 328 | |||
| 329 | 269 | bool saturation(vectorIn_t q, vectorOut_t qSat, Eigen::VectorXi& saturation) { | |
| 330 | static const value_type eps = 1e-1; | ||
| 331 | 269 | bool ret = false; | |
| 332 | 269 | qSat = q; | |
| 333 | 269 | saturation.setZero(); | |
| 334 |
2/2✓ Branch 1 taken 5 times.
✓ Branch 2 taken 264 times.
|
269 | if (q[1] > 0) { // b1 <= 0 |
| 335 | 5 | saturation[1] = 1; | |
| 336 | 5 | qSat[1] = 0.; | |
| 337 | 5 | ret = true; | |
| 338 | } | ||
| 339 |
2/2✓ Branch 1 taken 1 times.
✓ Branch 2 taken 268 times.
|
269 | if (q[2] > -eps) { // z < 0 |
| 340 | 1 | saturation[2] = 1; | |
| 341 | 1 | qSat[2] = -eps; | |
| 342 | 1 | ret = true; | |
| 343 | } | ||
| 344 |
2/2✓ Branch 1 taken 59 times.
✓ Branch 2 taken 210 times.
|
269 | if (q[3] < eps) { // s0 > 0 |
| 345 | 59 | saturation[3] = -1; | |
| 346 | 59 | qSat[3] = eps; | |
| 347 | 59 | ret = true; | |
| 348 | } | ||
| 349 |
2/2✓ Branch 1 taken 38 times.
✓ Branch 2 taken 231 times.
|
269 | if (q[5] < eps) { // d1 > 0 |
| 350 | 38 | saturation[5] = -1; | |
| 351 | 38 | qSat[5] = eps; | |
| 352 | 38 | ret = true; | |
| 353 | } | ||
| 354 |
2/2✓ Branch 1 taken 22 times.
✓ Branch 2 taken 247 times.
|
269 | if (q[8] < eps) { // h > 0 |
| 355 | 22 | saturation[8] = -1; | |
| 356 | 22 | qSat[8] = eps; | |
| 357 | 22 | ret = true; | |
| 358 | } | ||
| 359 | 269 | return ret; | |
| 360 | } | ||
| 361 | |||
| 362 | value_type ineq_thr = 0.001; | ||
| 363 | size_type max_iter = 100; | ||
| 364 | |||
| 365 | 2 | HierarchicalIterative createSolver(Data& data) { | |
| 366 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
2 | HierarchicalIterative solver(LiegroupSpace::Rn(Nv)); |
| 367 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
2 | solver.saturation(hpp::make_shared<solver::saturation::Function>(saturation)); |
| 368 | 2 | solver.inequalityThreshold(ineq_thr); | |
| 369 | 2 | solver.maxIterations(max_iter); | |
| 370 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
2 | solver.add(data.O_inside_1, 0); |
| 371 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
2 | solver.add(data.O_inside_2, 0); |
| 372 | 2 | return solver; | |
| 373 | } | ||
| 374 | |||
| 375 | 1 | void check(Data& d) { | |
| 376 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vector9_t x; |
| 377 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | x.setRandom(); |
| 378 | |||
| 379 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | d.ABC->invalidate(); |
| 380 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | d.ABC->computeValue(x); |
| 381 |
4/34✓ 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 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
|
1 | CHECK_EQUAL(d.A->value()[0], x(6)); |
| 382 |
4/34✓ 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 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
|
1 | CHECK_EQUAL(d.A->value()[1], x(7)); |
| 383 |
5/38✓ 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 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
|
1 | CHECK_EQUAL(d.A->value()[2], x(8) + x[2]); |
| 384 |
4/32✓ 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 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
|
1 | CHECK_EQUAL(d.B->value(), x.head<3>()); |
| 385 | |||
| 386 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | HierarchicalIterative solver(createSolver(d)); |
| 387 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | solver.add(d.c1_AB_OA, 1); |
| 388 | |||
| 389 |
9/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
|
1 | x << 0, -1, -1, 1, 0, 1, 0, 0, 2; |
| 390 | |||
| 391 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
1 | HierarchicalIterative::Status status = solver.solve<LineSearch_t>(x); |
| 392 |
1/22✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
1 | CHECK_EQUAL(status, HierarchicalIterative::SUCCESS); |
| 393 | 1 | } | |
| 394 | |||
| 395 | 1 | int checkCase(Data& d, int N, std::vector<int> conds) { | |
| 396 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | HierarchicalIterative solver(createSolver(d)); |
| 397 |
2/2✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
|
4 | for (std::size_t i = 0; i < conds.size(); ++i) { |
| 398 |
3/4✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
|
3 | if (i > 0) std::cout << '.'; |
| 399 |
2/2✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
|
3 | if (conds[i] > 0) { |
| 400 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | solver.add(d.a[conds[i] - 1], 1); |
| 401 | } else { | ||
| 402 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | std::cout << '!'; |
| 403 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | solver.add(d.not_a[-conds[i] - 1], 1); |
| 404 | } | ||
| 405 |
2/4✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
|
3 | std::cout << 'a' << abs(conds[i]); |
| 406 | } | ||
| 407 | |||
| 408 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vector9_t x, y; |
| 409 | 1 | bool success = false; | |
| 410 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | Eigen::VectorXi sat(Nv); |
| 411 |
3/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✓ Branch 3 taken 1 times.
|
5 | for (int i = 0; i < N && !success; ++i) { |
| 412 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | y.setRandom(); |
| 413 |
3/6✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
|
4 | saturation(y, x, sat); |
| 414 |
3/6✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
|
4 | HierarchicalIterative::Status status = solver.solve<LineSearch_t>(x); |
| 415 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
|
4 | if (status == HierarchicalIterative::SUCCESS) success = true; |
| 416 | } | ||
| 417 |
4/20✓ 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 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
1 | CHECK(!saturation(x, y, sat)); |
| 418 | |||
| 419 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | std::cout << " : "; |
| 420 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | if (success) { |
| 421 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | d.A->invalidate(); |
| 422 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | d.A->computeValue(x); |
| 423 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | d.B->invalidate(); |
| 424 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | d.B->computeValue(x); |
| 425 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | d.C->invalidate(); |
| 426 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | d.C->computeValue(x); |
| 427 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | d.D->invalidate(); |
| 428 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | d.D->computeValue(x); |
| 429 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
1 | std::cout << "found.\nX = " << setpyformat << one_line(x) << '\n'; |
| 430 | std::cout << '\n' | ||
| 431 |
5/10✓ 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.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
|
1 | << "A = np.array(" << one_line(d.A->value()) << ")\n" |
| 432 |
5/10✓ 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.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
|
1 | << "B = np.array(" << one_line(d.B->value()) << ")\n" |
| 433 |
5/10✓ 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.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
|
1 | << "C = np.array(" << one_line(d.C->value()) << ")\n" |
| 434 |
6/12✓ 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.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
|
1 | << "D = np.array(" << one_line(d.D->value()) << ")\n"; |
| 435 | } else { | ||
| 436 | ✗ | std::cout << "failed\n"; | |
| 437 | } | ||
| 438 | |||
| 439 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | std::cout << '\n'; |
| 440 | 1 | const NumericalConstraints_t& ncs = solver.constraints(); | |
| 441 |
2/2✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
|
6 | for (std::size_t i = 0; i < ncs.size(); ++i) { |
| 442 |
3/4✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
|
5 | if (i > 0) std::cout << " . "; |
| 443 |
1/2✓ Branch 5 taken 5 times.
✗ Branch 6 not taken.
|
5 | std::cout << ncs[i]->function().name(); |
| 444 | } | ||
| 445 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | std::cout << '\n'; |
| 446 | |||
| 447 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
2 | return (success ? 0 : 1); |
| 448 | 1 | } | |
| 449 | |||
| 450 | template <typename T> | ||
| 451 | ✗ | T parse(char* arg) { | |
| 452 | ✗ | std::istringstream iss(arg); | |
| 453 | T val; | ||
| 454 | ✗ | if (iss >> val) return val; | |
| 455 | ✗ | std::ostringstream oss; | |
| 456 | ✗ | oss << "Could not parse " << arg << " as an integer."; | |
| 457 | ✗ | throw std::invalid_argument(oss.str()); | |
| 458 | } | ||
| 459 | |||
| 460 | 1 | int main(int argc, char** argv) { | |
| 461 | 1 | int max_num_shoot = 100; | |
| 462 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | std::vector<int> case_, defaultCase({1, 4, -5}); |
| 463 | |||
| 464 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | for (int i = 1; i < argc; ++i) { |
| 465 | ✗ | if (strcmp(argv[i], "--num-shoot") == 0) | |
| 466 | ✗ | max_num_shoot = parse<int>(argv[++i]); | |
| 467 | ✗ | else if (strcmp(argv[i], "--ineq-thr") == 0) | |
| 468 | ✗ | ineq_thr = parse<value_type>(argv[++i]); | |
| 469 | ✗ | else if (strcmp(argv[i], "--max-iter") == 0) | |
| 470 | ✗ | max_iter = parse<size_type>(argv[++i]); | |
| 471 | else | ||
| 472 | ✗ | case_.push_back(parse<int>(argv[i])); | |
| 473 | } | ||
| 474 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | if (case_.empty()) case_ = defaultCase; |
| 475 | |||
| 476 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | Data data; |
| 477 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | check(data); |
| 478 | |||
| 479 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | return checkCase(data, max_num_shoot, case_); |
| 480 | 1 | } | |
| 481 |