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 |