Directory: | ./ |
---|---|
File: | tests/Main.cpp |
Date: | 2025-03-05 17:18:30 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 1844 | 2386 | 77.3% |
Branches: | 2575 | 6018 | 42.8% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | #include <cmath> | ||
2 | #include <ctime> | ||
3 | #include <iostream> | ||
4 | #include <memory> | ||
5 | #include <string> | ||
6 | |||
7 | #include "load_problem.h" | ||
8 | #include "ndcurves/bezier_curve.h" | ||
9 | #include "ndcurves/cubic_hermite_spline.h" | ||
10 | #include "ndcurves/curve_conversion.h" | ||
11 | #include "ndcurves/exact_cubic.h" | ||
12 | #include "ndcurves/fwd.h" | ||
13 | #include "ndcurves/helpers/effector_spline.h" | ||
14 | #include "ndcurves/helpers/effector_spline_rotation.h" | ||
15 | #include "ndcurves/optimization/definitions.h" | ||
16 | #include "ndcurves/piecewise_curve.h" | ||
17 | #include "ndcurves/polynomial.h" | ||
18 | #include "ndcurves/se3_curve.h" | ||
19 | #include "ndcurves/serialization/curves.hpp" | ||
20 | #include "ndcurves/so3_linear.h" | ||
21 | |||
22 | using namespace std; | ||
23 | |||
24 | namespace ndcurves { | ||
25 | typedef exact_cubic<double, double, true, Eigen::Matrix<double, 1, 1> > | ||
26 | exact_cubic_one; | ||
27 | typedef exact_cubic_t::spline_constraints spline_constraints_t; | ||
28 | |||
29 | typedef std::pair<double, pointX_t> Waypoint; | ||
30 | typedef std::vector<Waypoint> T_Waypoint; | ||
31 | typedef Eigen::Matrix<double, 1, 1> point_one; | ||
32 | typedef std::pair<double, point_one> WaypointOne; | ||
33 | typedef std::vector<WaypointOne> T_WaypointOne; | ||
34 | typedef std::pair<pointX_t, pointX_t> pair_point_tangent_t; | ||
35 | typedef std::vector<pair_point_tangent_t, | ||
36 | Eigen::aligned_allocator<pair_point_tangent_t> > | ||
37 | t_pair_point_tangent_t; | ||
38 | |||
39 | const double margin = 1e-3; | ||
40 | 1299 | bool QuasiEqual(const double a, const double b) { | |
41 | 1299 | return std::fabs(a - b) < margin; | |
42 | } | ||
43 | 405 | bool QuasiEqual(const point3_t a, const point3_t b) { | |
44 | 405 | bool equal = true; | |
45 |
2/2✓ Branch 0 taken 1215 times.
✓ Branch 1 taken 405 times.
|
1620 | for (size_t i = 0; i < 3; ++i) { |
46 |
2/4✓ Branch 0 taken 1215 times.
✗ Branch 1 not taken.
✓ Branch 5 taken 1215 times.
✗ Branch 6 not taken.
|
1215 | equal = equal && QuasiEqual(a[i], b[i]); |
47 | } | ||
48 | 405 | return equal; | |
49 | } | ||
50 | } // End namespace ndcurves | ||
51 | |||
52 | using namespace ndcurves; | ||
53 | |||
54 | ✗ | ostream& operator<<(ostream& os, const point3_t& pt) { | |
55 | ✗ | os << "(" << pt.x() << ", " << pt.y() << ", " << pt.z() << ")"; | |
56 | ✗ | return os; | |
57 | } | ||
58 | |||
59 | 900 | void ComparePoints(const transform_t& pt1, const transform_t& pt2, | |
60 | const std::string& errmsg, bool& error, | ||
61 | double prec = Eigen::NumTraits<double>::dummy_precision(), | ||
62 | bool notequal = false) { | ||
63 |
2/6✗ Branch 1 not taken.
✓ Branch 2 taken 900 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 900 times.
|
900 | if (!pt1.isApprox(pt2, prec) && !notequal) { |
64 | ✗ | error = true; | |
65 | ✗ | std::cout << errmsg << " translation :" << pt1.translation() << " ; " | |
66 | ✗ | << pt2.translation() << std::endl | |
67 | ✗ | << "rotation : " << pt1.rotation() << " ; " << pt2.rotation() | |
68 | ✗ | << std::endl; | |
69 | } | ||
70 | 900 | } | |
71 | |||
72 | 206996 | void ComparePoints(const Eigen::MatrixXd& pt1, const Eigen::MatrixXd& pt2, | |
73 | const std::string& errmsg, bool& error, | ||
74 | double prec = Eigen::NumTraits<double>::dummy_precision(), | ||
75 | bool notequal = false) { | ||
76 |
5/8✓ Branch 1 taken 2 times.
✓ Branch 2 taken 206994 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 206996 times.
|
206996 | if (!pt1.isApprox(pt2, prec) && !(pt1.isZero(prec) && pt2.isZero(prec)) && |
77 | ✗ | !notequal) { | |
78 | ✗ | error = true; | |
79 | ✗ | std::cout << errmsg << pt1 << " ; " << pt2 << std::endl; | |
80 | } | ||
81 | 206996 | } | |
82 | |||
83 | template <typename curve1, typename curve2> | ||
84 | 70 | void CompareCurves(const curve1& c1, const curve2& c2, | |
85 | const std::string& errMsg, bool& error, | ||
86 | double prec = Eigen::NumTraits<double>::dummy_precision()) { | ||
87 | 70 | double T_min = c1.min(); | |
88 | 70 | double T_max = c1.max(); | |
89 |
3/6✓ Branch 2 taken 35 times.
✗ Branch 3 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 35 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 35 times.
|
70 | if (!QuasiEqual(T_min, c2.min()) || !QuasiEqual(T_max, c2.max())) { |
90 | std::cout | ||
91 | << errMsg | ||
92 | ✗ | << "CompareCurves, ERROR, time min and max of curves do not match [" | |
93 | ✗ | << T_min << "," << T_max << "] " | |
94 | ✗ | << " and [" << c2.min() << "," << c2.max() << "] " << std::endl; | |
95 | ✗ | error = true; | |
96 | } else { | ||
97 | // derivative in T_min and T_max | ||
98 |
5/10✓ Branch 2 taken 35 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 35 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 35 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 35 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 35 times.
✗ Branch 15 not taken.
|
70 | ComparePoints(c1.derivate(T_min, 1), c2.derivate(T_min, 1), |
99 | errMsg + " Derivates at tMin do not match.", error, prec, | ||
100 | false); | ||
101 |
5/10✓ Branch 2 taken 35 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 35 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 35 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 35 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 35 times.
✗ Branch 15 not taken.
|
70 | ComparePoints(c1.derivate(T_max, 1), c2.derivate(T_max, 1), |
102 | errMsg + " Derivates at tMax do not match.", error, prec, | ||
103 | false); | ||
104 | // Test values on curves | ||
105 |
2/2✓ Branch 0 taken 6880 times.
✓ Branch 1 taken 35 times.
|
13830 | for (double i = T_min; i <= T_max; i += 0.01) { |
106 |
8/16✓ Branch 1 taken 6880 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6880 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6880 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 6880 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 6880 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 6880 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 5980 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 5980 times.
✗ Branch 23 not taken.
|
13760 | ComparePoints(c1(i), c2(i), |
107 | errMsg + " Curves evaluation do not match at t = " + | ||
108 | boost::lexical_cast<std::string>(i), | ||
109 | error, prec, false); | ||
110 | } | ||
111 | } | ||
112 | 70 | } | |
113 | |||
114 | /*Cubic Function tests*/ | ||
115 | 1 | void PolynomialCubicFunctionTest(bool& error) { | |
116 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | std::string errMsg("In test CubicFunctionTest ; unexpected result for x "); |
117 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 2, 3); |
118 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 3, 4); |
119 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 4, 5); |
120 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d(3, 6, 7); |
121 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | t_pointX_t vec; |
122 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(a); |
123 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(b); |
124 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(c); |
125 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(d); |
126 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | polynomial_t cf(vec.begin(), vec.end(), 0, 1); |
127 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t res1; |
128 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cf(0); |
129 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t x0(1, 2, 3); |
130 |
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.
|
1 | ComparePoints(x0, res1, errMsg + "(0) ", error); |
131 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t x1(9, 15, 19); |
132 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cf(1); |
133 |
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.
|
1 | ComparePoints(x1, res1, errMsg + "(1) ", error); |
134 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t x2(3.125, 5.25, 7.125); |
135 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cf(0.5); |
136 |
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.
|
1 | ComparePoints(x2, res1, errMsg + "(0.5) ", error); |
137 | 1 | vec.clear(); | |
138 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(a); |
139 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(b); |
140 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(c); |
141 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(d); |
142 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t cf2(vec, 0.5, 1); |
143 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cf2(0.5); |
144 |
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.
|
1 | ComparePoints(x0, res1, errMsg + "x3 ", error); |
145 | 1 | error = true; | |
146 | try { | ||
147 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | cf2(0.4); |
148 | 1 | } catch (...) { | |
149 | 1 | error = false; | |
150 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | } |
151 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (error) { |
152 | std::cout << "Evaluation of cubic cf2 error, 0.4 should be an out of range " | ||
153 | ✗ | "value\n"; | |
154 | } | ||
155 | 1 | error = true; | |
156 | try { | ||
157 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | cf2(1.1); |
158 | 1 | } catch (...) { | |
159 | 1 | error = false; | |
160 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | } |
161 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (error) { |
162 | std::cout << "Evaluation of cubic cf2 error, 1.1 should be an out of range " | ||
163 | ✗ | "value\n"; | |
164 | } | ||
165 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | if (!QuasiEqual(cf.max(), 1.0)) { |
166 | ✗ | error = true; | |
167 | std::cout | ||
168 | ✗ | << "Evaluation of cubic cf error, MaxBound should be equal to 1\n"; | |
169 | } | ||
170 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | if (!QuasiEqual(cf.min(), 0.0)) { |
171 | ✗ | error = true; | |
172 | std::cout | ||
173 | ✗ | << "Evaluation of cubic cf error, MinBound should be equal to 1\n"; | |
174 | } | ||
175 | // Test derivate and compute_derivative | ||
176 | // Order 1 | ||
177 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | curve_abc_t* cf_derivated = cf.compute_derivate_ptr(1); |
178 |
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.
|
2 | ComparePoints(cf.derivate(0, 1), (*cf_derivated)(0), |
179 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | errMsg + " - derivate order 1 : ", error); |
180 |
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.
|
2 | ComparePoints(cf.derivate(0.3, 1), (*cf_derivated)(0.3), |
181 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | errMsg + " - derivate order 1 : ", error); |
182 |
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.
|
2 | ComparePoints(cf.derivate(0.5, 1), (*cf_derivated)(0.5), |
183 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | errMsg + " - derivate order 1 : ", error); |
184 |
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.
|
2 | ComparePoints(cf.derivate(1, 1), (*cf_derivated)(1), |
185 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | errMsg + " - derivate order 1 : ", error); |
186 | // Order 2 | ||
187 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t cf_derivated_2 = cf.compute_derivate(2); |
188 |
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.
|
2 | ComparePoints(cf.derivate(0, 2), (cf_derivated_2)(0), |
189 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | errMsg + " - derivate order 1 : ", error); |
190 |
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.
|
2 | ComparePoints(cf.derivate(0.3, 2), (cf_derivated_2)(0.3), |
191 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | errMsg + " - derivate order 1 : ", error); |
192 |
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.
|
2 | ComparePoints(cf.derivate(0.5, 2), (cf_derivated_2)(0.5), |
193 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | errMsg + " - derivate order 1 : ", error); |
194 |
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.
|
2 | ComparePoints(cf.derivate(1, 2), (cf_derivated_2)(1), |
195 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | errMsg + " - derivate order 1 : ", error); |
196 | 1 | } | |
197 | |||
198 | /*bezier_curve Function tests*/ | ||
199 | 1 | void BezierCurveTest(bool& error) { | |
200 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | std::string errMsg("In test BezierCurveTest ; unexpected result for x "); |
201 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 2, 3); |
202 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 3, 4); |
203 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 4, 5); |
204 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d(3, 6, 7); |
205 | 1 | std::vector<point3_t> params; | |
206 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(a); |
207 | // 1d curve in [0,1] | ||
208 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t cf1(params.begin(), params.end()); |
209 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t res1; |
210 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cf1(0); |
211 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t x10 = a; |
212 |
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.
|
1 | ComparePoints(x10, res1, errMsg + "1(0) ", error); |
213 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cf1(1); |
214 |
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.
|
1 | ComparePoints(x10, res1, errMsg + "1(1) ", error); |
215 | // 2d curve in [0,1] | ||
216 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(b); |
217 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t cf(params.begin(), params.end()); |
218 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cf(0); |
219 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t x20 = a; |
220 |
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.
|
1 | ComparePoints(x20, res1, errMsg + "2(0) ", error); |
221 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t x21 = b; |
222 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cf(1); |
223 |
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.
|
1 | ComparePoints(x21, res1, errMsg + "2(1) ", error); |
224 | // 3d curve in [0,1] | ||
225 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(c); |
226 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t cf3(params.begin(), params.end()); |
227 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cf3(0); |
228 |
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.
|
1 | ComparePoints(a, res1, errMsg + "3(0) ", error); |
229 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cf3(1); |
230 |
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.
|
1 | ComparePoints(c, res1, errMsg + "3(1) ", error); |
231 | // 4d curve in [1,2] | ||
232 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(d); |
233 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t cf4(params.begin(), params.end(), 1., 2.); |
234 | // testing bernstein polynomials | ||
235 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t cf5(params.begin(), params.end(), 1., 2.); |
236 | std::string errMsg2( | ||
237 | "In test BezierCurveTest ; Bernstein polynomials do not evaluate as " | ||
238 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "analytical evaluation"); |
239 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bezier_t cf5_derivated = cf5.compute_derivate(1); |
240 | |||
241 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
|
11 | for (double d = 1.; d < 2.; d += 0.1) { |
242 |
5/10✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 10 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 10 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 10 times.
✗ Branch 15 not taken.
|
10 | ComparePoints(cf5.evalBernstein(d), cf5(d), errMsg2, error); |
243 |
5/10✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 10 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 10 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 10 times.
✗ Branch 15 not taken.
|
10 | ComparePoints(cf5.evalHorner(d), cf5(d), errMsg2, error); |
244 |
5/10✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 10 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 10 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 10 times.
✗ Branch 15 not taken.
|
10 | ComparePoints(cf5_derivated.evalBernstein(d), cf5_derivated(d), errMsg2, |
245 | error); | ||
246 |
5/10✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 10 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 10 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 10 times.
✗ Branch 15 not taken.
|
10 | ComparePoints(cf5_derivated.evalHorner(d), cf5_derivated(d), errMsg2, |
247 | error); | ||
248 |
5/10✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 10 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 10 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 10 times.
✗ Branch 15 not taken.
|
10 | ComparePoints(cf5.derivate(d, 1), cf5_derivated(d), errMsg2, error); |
249 | } | ||
250 | 1 | bool error_in(true); | |
251 | try { | ||
252 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | cf(-0.4); |
253 | 1 | } catch (...) { | |
254 | 1 | error_in = false; | |
255 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | } |
256 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (error_in) { |
257 | std::cout << "Evaluation of bezier cf error, -0.4 should be an out of " | ||
258 | ✗ | "range value\n"; | |
259 | ✗ | error = true; | |
260 | } | ||
261 | 1 | error_in = true; | |
262 | try { | ||
263 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | cf(1.1); |
264 | 1 | } catch (...) { | |
265 | 1 | error_in = false; | |
266 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | } |
267 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (error_in) { |
268 | std::cout << "Evaluation of bezier cf error, 1.1 should be an out of range " | ||
269 | ✗ | "value\n"; | |
270 | ✗ | error = true; | |
271 | } | ||
272 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | if (!QuasiEqual(cf.max(), 1.0)) { |
273 | ✗ | error = true; | |
274 | std::cout | ||
275 | ✗ | << "Evaluation of bezier cf error, MaxBound should be equal to 1\n"; | |
276 | } | ||
277 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | if (!QuasiEqual(cf.min(), 0.0)) { |
278 | ✗ | error = true; | |
279 | std::cout | ||
280 | ✗ | << "Evaluation of bezier cf error, MinBound should be equal to 1\n"; | |
281 | } | ||
282 | 1 | } | |
283 | |||
284 | 1 | void BezierCurveTestCompareHornerAndBernstein(bool&) // error | |
285 | { | ||
286 | using namespace std; | ||
287 | 1 | std::vector<double> values; | |
288 |
2/2✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 1 times.
|
100001 | for (int i = 0; i < 100000; ++i) { |
289 |
1/2✓ Branch 2 taken 100000 times.
✗ Branch 3 not taken.
|
100000 | values.push_back(rand() / (double)RAND_MAX); |
290 | } | ||
291 | // first compare regular evaluation (low dim pol) | ||
292 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 2, 3); |
293 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 3, 4); |
294 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 4, 5); |
295 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d(3, 6, 7); |
296 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t e(3, 61, 7); |
297 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t f(3, 56, 7); |
298 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t g(3, 36, 7); |
299 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t h(43, 6, 7); |
300 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t i(3, 6, 77); |
301 | 1 | std::vector<point3_t> params; | |
302 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(a); |
303 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(b); |
304 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(c); |
305 | // 3d curve | ||
306 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t cf(params.begin(), params.end()); // defined in [0,1] |
307 | // Check all evaluation of bezier curve | ||
308 | clock_t s0, e0, s1, e1, s2, e2, s3, e3; | ||
309 | 1 | s0 = clock(); | |
310 | 1 | for (std::vector<double>::const_iterator cit = values.begin(); | |
311 |
2/2✓ Branch 2 taken 100000 times.
✓ Branch 3 taken 1 times.
|
100001 | cit != values.end(); ++cit) { |
312 |
1/2✓ Branch 2 taken 100000 times.
✗ Branch 3 not taken.
|
100000 | cf(*cit); |
313 | } | ||
314 | 1 | e0 = clock(); | |
315 | 1 | s1 = clock(); | |
316 | 1 | for (std::vector<double>::const_iterator cit = values.begin(); | |
317 |
2/2✓ Branch 2 taken 100000 times.
✓ Branch 3 taken 1 times.
|
100001 | cit != values.end(); ++cit) { |
318 |
1/2✓ Branch 2 taken 100000 times.
✗ Branch 3 not taken.
|
100000 | cf.evalBernstein(*cit); |
319 | } | ||
320 | 1 | e1 = clock(); | |
321 | |||
322 | 1 | s2 = clock(); | |
323 | 1 | for (std::vector<double>::const_iterator cit = values.begin(); | |
324 |
2/2✓ Branch 2 taken 100000 times.
✓ Branch 3 taken 1 times.
|
100001 | cit != values.end(); ++cit) { |
325 |
1/2✓ Branch 2 taken 100000 times.
✗ Branch 3 not taken.
|
100000 | cf.evalHorner(*cit); |
326 | } | ||
327 | 1 | e2 = clock(); | |
328 | 1 | s3 = clock(); | |
329 | 1 | for (std::vector<double>::const_iterator cit = values.begin(); | |
330 |
2/2✓ Branch 2 taken 100000 times.
✓ Branch 3 taken 1 times.
|
100001 | cit != values.end(); ++cit) { |
331 |
1/2✓ Branch 2 taken 100000 times.
✗ Branch 3 not taken.
|
100000 | cf.evalDeCasteljau(*cit); |
332 | } | ||
333 | 1 | e3 = clock(); | |
334 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | std::cout << "time for analytical eval " << double(e0 - s0) / CLOCKS_PER_SEC |
335 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | << std::endl; |
336 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | std::cout << "time for bernstein eval " << double(e1 - s1) / CLOCKS_PER_SEC |
337 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | << std::endl; |
338 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | std::cout << "time for horner eval " << double(e2 - s2) / CLOCKS_PER_SEC |
339 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | << std::endl; |
340 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | std::cout << "time for deCasteljau eval " << double(e3 - s3) / CLOCKS_PER_SEC |
341 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | << std::endl; |
342 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | std::cout << "now with high order polynomial " << std::endl; |
343 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(d); |
344 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(e); |
345 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(f); |
346 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(g); |
347 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(h); |
348 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(i); |
349 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t cf2(params.begin(), params.end()); |
350 | 1 | s1 = clock(); | |
351 | 1 | for (std::vector<double>::const_iterator cit = values.begin(); | |
352 |
2/2✓ Branch 2 taken 100000 times.
✓ Branch 3 taken 1 times.
|
100001 | cit != values.end(); ++cit) { |
353 |
1/2✓ Branch 2 taken 100000 times.
✗ Branch 3 not taken.
|
100000 | cf2.evalBernstein(*cit); |
354 | } | ||
355 | 1 | e1 = clock(); | |
356 | 1 | s2 = clock(); | |
357 | 1 | for (std::vector<double>::const_iterator cit = values.begin(); | |
358 |
2/2✓ Branch 2 taken 100000 times.
✓ Branch 3 taken 1 times.
|
100001 | cit != values.end(); ++cit) { |
359 |
1/2✓ Branch 2 taken 100000 times.
✗ Branch 3 not taken.
|
100000 | cf2.evalHorner(*cit); |
360 | } | ||
361 | 1 | e2 = clock(); | |
362 | 1 | s0 = clock(); | |
363 | 1 | for (std::vector<double>::const_iterator cit = values.begin(); | |
364 |
2/2✓ Branch 2 taken 100000 times.
✓ Branch 3 taken 1 times.
|
100001 | cit != values.end(); ++cit) { |
365 |
1/2✓ Branch 2 taken 100000 times.
✗ Branch 3 not taken.
|
100000 | cf2(*cit); |
366 | } | ||
367 | 1 | e0 = clock(); | |
368 | 1 | s3 = clock(); | |
369 | 1 | for (std::vector<double>::const_iterator cit = values.begin(); | |
370 |
2/2✓ Branch 2 taken 100000 times.
✓ Branch 3 taken 1 times.
|
100001 | cit != values.end(); ++cit) { |
371 |
1/2✓ Branch 2 taken 100000 times.
✗ Branch 3 not taken.
|
100000 | cf2.evalDeCasteljau(*cit); |
372 | } | ||
373 | 1 | e3 = clock(); | |
374 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | std::cout << "time for analytical eval " << double(e0 - s0) / CLOCKS_PER_SEC |
375 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | << std::endl; |
376 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | std::cout << "time for bernstein eval " << double(e1 - s1) / CLOCKS_PER_SEC |
377 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | << std::endl; |
378 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | std::cout << "time for horner eval " << double(e2 - s2) / CLOCKS_PER_SEC |
379 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | << std::endl; |
380 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | std::cout << "time for deCasteljau eval " << double(e3 - s3) / CLOCKS_PER_SEC |
381 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | << std::endl; |
382 | 1 | } | |
383 | |||
384 | 1 | void BezierDerivativeCurveTest(bool& error) { | |
385 | std::string errMsg( | ||
386 | "In test BezierDerivativeCurveTest ;, Error While checking value of " | ||
387 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "point on curve : "); |
388 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 2, 3); |
389 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 3, 4); |
390 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 4, 5); |
391 | 1 | std::vector<point3_t> params; | |
392 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(a); |
393 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(b); |
394 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(c); |
395 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t cf3(params.begin(), params.end()); |
396 |
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 | ComparePoints(cf3(0), cf3.derivate(0., 1), errMsg, error, true); |
397 |
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.
|
1 | ComparePoints(point3_t::Zero(), cf3.derivate(0., 100), errMsg, error); |
398 | 1 | } | |
399 | |||
400 | 1 | void BezierDerivativeCurveTimeReparametrizationTest(bool& error) { | |
401 | std::string errMsg( | ||
402 | "In test BezierDerivativeCurveTimeReparametrizationTest, Error While " | ||
403 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "checking value of point on curve : "); |
404 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 2, 3); |
405 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 3, 4); |
406 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 4, 5); |
407 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d(3, 4, 5); |
408 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t e(3, 4, 5); |
409 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t f(3, 4, 5); |
410 | 1 | std::vector<point3_t> params; | |
411 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(a); |
412 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(b); |
413 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(c); |
414 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(d); |
415 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(e); |
416 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(f); |
417 | 1 | double Tmin = 0.; | |
418 | 1 | double Tmax = 2.; | |
419 | 1 | double diffT = Tmax - Tmin; | |
420 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t cf(params.begin(), params.end()); |
421 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t cfT(params.begin(), params.end(), Tmin, Tmax); |
422 |
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.
|
1 | ComparePoints(cf(0.5), cfT(1), errMsg, error); |
423 |
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.
|
1 | ComparePoints(cf.derivate(0.5, 1), cfT.derivate(1, 1) * (diffT), errMsg, |
424 | error); | ||
425 |
7/14✓ 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.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
1 | ComparePoints(cf.derivate(0.5, 2), cfT.derivate(1, 2) * diffT * diffT, errMsg, |
426 | error); | ||
427 | 1 | } | |
428 | |||
429 | 1 | void BezierDerivativeCurveConstraintTest(bool& error) { | |
430 | std::string errMsg0( | ||
431 | "In test BezierDerivativeCurveConstraintTest, Error While checking value " | ||
432 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "of point on curve : "); |
433 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 2, 3); |
434 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 3, 4); |
435 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 4, 5); |
436 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bezier_t::curve_constraints_t constraints(3); |
437 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.init_vel = point3_t(-1, -1, -1); |
438 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.init_acc = point3_t(-2, -2, -2); |
439 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.end_vel = point3_t(-10, -10, -10); |
440 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.end_acc = point3_t(-20, -20, -20); |
441 | 1 | std::vector<point3_t> params; | |
442 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(a); |
443 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(b); |
444 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(c); |
445 | 1 | bezier_t::num_t T_min = 1.0; | |
446 | 1 | bezier_t::num_t T_max = 3.0; | |
447 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t cf(params.begin(), params.end(), constraints, T_min, T_max); |
448 |
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.
|
1 | ComparePoints(a, cf(T_min), errMsg0, error); |
449 |
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.
|
1 | ComparePoints(c, cf(T_max), errMsg0, error); |
450 |
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.
|
1 | ComparePoints(constraints.init_vel, cf.derivate(T_min, 1), errMsg0, error); |
451 |
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.
|
1 | ComparePoints(constraints.end_vel, cf.derivate(T_max, 1), errMsg0, error); |
452 |
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.
|
1 | ComparePoints(constraints.init_acc, cf.derivate(T_min, 2), errMsg0, error); |
453 |
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.
|
1 | ComparePoints(constraints.end_vel, cf.derivate(T_max, 1), errMsg0, error); |
454 |
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.
|
1 | ComparePoints(constraints.end_acc, cf.derivate(T_max, 2), errMsg0, error); |
455 | std::string errMsg1( | ||
456 | "In test BezierDerivativeCurveConstraintTest, Error While checking " | ||
457 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "checking degree of bezier curve :"); |
458 | std::string errMsg2( | ||
459 | "In test BezierDerivativeCurveConstraintTest, Error While checking " | ||
460 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "checking size of bezier curve :"); |
461 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (cf.degree_ != params.size() + 3) { |
462 | ✗ | error = true; | |
463 | ✗ | std::cout << errMsg1 << cf.degree_ << " ; " << params.size() + 3 | |
464 | ✗ | << std::endl; | |
465 | } | ||
466 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (cf.size_ != params.size() + 4) { |
467 | ✗ | error = true; | |
468 | ✗ | std::cout << errMsg2 << cf.size_ << " ; " << params.size() + 4 << std::endl; | |
469 | } | ||
470 | 1 | } | |
471 | |||
472 | 1 | void toPolynomialConversionTest(bool& error) { | |
473 | // bezier to polynomial | ||
474 | std::string errMsg( | ||
475 | "In test BezierToPolynomialConversionTest, Error While checking value of " | ||
476 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "point on curve : "); |
477 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 2, 3); |
478 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 3, 4); |
479 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 4, 5); |
480 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d(3, 6, 7); |
481 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t e(3, 61, 7); |
482 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t f(3, 56, 7); |
483 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t g(3, 36, 7); |
484 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t h(43, 6, 7); |
485 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t i(3, 6, 77); |
486 | 1 | std::vector<point3_t> control_points; | |
487 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(a); |
488 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(b); |
489 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(c); |
490 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(d); |
491 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(e); |
492 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(f); |
493 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(g); |
494 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(h); |
495 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(i); |
496 | 1 | bezier_t::num_t T_min = 1.0; | |
497 | 1 | bezier_t::num_t T_max = 3.0; | |
498 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t bc(control_points.begin(), control_points.end(), T_min, T_max); |
499 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t pol = polynomial_from_curve<polynomial_t>(bc); |
500 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<polynomial_t, bezier_t>(pol, bc, errMsg, error); |
501 | 1 | } | |
502 | |||
503 | 1 | void cubicConversionTest(bool& error) { | |
504 | std::string errMsg0( | ||
505 | "In test CubicConversionTest - convert hermite to, Error While checking " | ||
506 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "value of point on curve : "); |
507 | std::string errMsg1( | ||
508 | "In test CubicConversionTest - convert bezier to, Error While checking " | ||
509 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "value of point on curve : "); |
510 | std::string errMsg2( | ||
511 | "In test CubicConversionTest - convert polynomial to, Error While " | ||
512 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "checking value of point on curve : "); |
513 | // Create cubic hermite spline : Test hermite to bezier/polynomial | ||
514 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t p0(1, 2, 3); |
515 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t m0(2, 3, 4); |
516 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t p1(3, 4, 5); |
517 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t m1(3, 6, 7); |
518 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pair_point_tangent_t pair0(p0, m0); |
519 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pair_point_tangent_t pair1(p1, m1); |
520 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | t_pair_point_tangent_t control_points; |
521 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(pair0); |
522 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(pair1); |
523 | 1 | std::vector<double> time_control_points; | |
524 | 1 | polynomial_t::num_t T_min = 1.0; | |
525 | 1 | polynomial_t::num_t T_max = 3.0; | |
526 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points.push_back(T_min); |
527 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points.push_back(T_max); |
528 | cubic_hermite_spline_t chs0(control_points.begin(), control_points.end(), | ||
529 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | time_control_points); |
530 | // hermite to bezier | ||
531 | // std::cout<<"======================= \n"; | ||
532 | // std::cout<<"hermite to bezier \n"; | ||
533 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bezier_t bc0 = bezier_from_curve<bezier_t>(chs0); |
534 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<cubic_hermite_spline_t, bezier_t>(chs0, bc0, errMsg0, error); |
535 | // hermite to pol | ||
536 | // std::cout<<"======================= \n"; | ||
537 | // std::cout<<"hermite to polynomial \n"; | ||
538 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t pol0 = polynomial_from_curve<polynomial_t>(chs0); |
539 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<cubic_hermite_spline_t, polynomial_t>(chs0, pol0, errMsg0, |
540 | error); | ||
541 | // pol to hermite | ||
542 | // std::cout<<"======================= \n"; | ||
543 | // std::cout<<"polynomial to hermite \n"; | ||
544 | cubic_hermite_spline_t chs1 = | ||
545 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | hermite_from_curve<cubic_hermite_spline_t>(pol0); |
546 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<polynomial_t, cubic_hermite_spline_t>(pol0, chs1, errMsg2, |
547 | error); | ||
548 | // pol to bezier | ||
549 | // std::cout<<"======================= \n"; | ||
550 | // std::cout<<"polynomial to bezier \n"; | ||
551 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bezier_t bc1 = bezier_from_curve<bezier_t>(pol0); |
552 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<bezier_t, polynomial_t>(bc1, pol0, errMsg2, error); |
553 | // Bezier to pol | ||
554 | // std::cout<<"======================= \n"; | ||
555 | // std::cout<<"bezier to polynomial \n"; | ||
556 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t pol1 = polynomial_from_curve<polynomial_t>(bc0); |
557 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<bezier_t, polynomial_t>(bc0, pol1, errMsg1, error); |
558 | // bezier => hermite | ||
559 | // std::cout<<"======================= \n"; | ||
560 | // std::cout<<"bezier to hermite \n"; | ||
561 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | cubic_hermite_spline_t chs2 = hermite_from_curve<cubic_hermite_spline_t>(bc0); |
562 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<bezier_t, cubic_hermite_spline_t>(bc0, chs2, errMsg1, error); |
563 | |||
564 | // Test : compute derivative of bezier => Convert it to polynomial | ||
565 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | curve_abc_t* bc_der = bc0.compute_derivate_ptr(1); |
566 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t pol_test = polynomial_from_curve<polynomial_t>(*bc_der); |
567 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<curve_abc_t, polynomial_t>(*bc_der, pol_test, errMsg1, error); |
568 | |||
569 | // check that an error is correctly raised when degree > 3: | ||
570 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 2, 3); |
571 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 3, 4); |
572 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 4, 5); |
573 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d(3, 6, 7); |
574 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t e(3, 6, 7); |
575 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | t_pointX_t vec; |
576 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(a); |
577 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(b); |
578 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(c); |
579 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(d); |
580 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(e); |
581 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | polynomial_t pol_4(vec.begin(), vec.end(), 0, 1); |
582 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (pol_4.degree() != 4) { |
583 | std::cout << "In test CubicConversionTest - Error in the creatin of the " | ||
584 | ✗ | "polynomial" | |
585 | ✗ | << std::endl; | |
586 | ✗ | error = true; | |
587 | } | ||
588 | try { | ||
589 | cubic_hermite_spline_t chs3 = | ||
590 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | hermite_from_curve<cubic_hermite_spline_t>(pol_4); |
591 | std::cout << "In test CubicConversionTest - Cannot convert to hermite from " | ||
592 | ✗ | "degree > 3, should raise an error" | |
593 | ✗ | << std::endl; | |
594 | ✗ | error = true; | |
595 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | } catch (std::invalid_argument& /*e*/) { |
596 | 1 | } | |
597 | try { | ||
598 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | bezier_t b3 = bezier_from_curve<bezier_t>(pol_4); |
599 | std::cout << "In test CubicConversionTest - Cannot convert to bezier from " | ||
600 | ✗ | "degree > 3, should raise an error" | |
601 | ✗ | << std::endl; | |
602 | ✗ | error = true; | |
603 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | } catch (std::invalid_argument& /*e*/) { |
604 | 1 | } | |
605 | 1 | } | |
606 | |||
607 | /*Exact Cubic Function tests*/ | ||
608 | 1 | void ExactCubicNoErrorTest(bool& error) { | |
609 | // Create an exact cubic spline with 7 waypoints => 6 polynomials defined in | ||
610 | // [0.0,3.0] | ||
611 | 1 | ndcurves::T_Waypoint waypoints; | |
612 |
2/2✓ Branch 0 taken 7 times.
✓ Branch 1 taken 1 times.
|
8 | for (double i = 0.0; i <= 3.0; i = i + 0.5) { |
613 |
4/8✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 7 times.
✗ Branch 11 not taken.
|
7 | waypoints.push_back(std::make_pair(i, point3_t(i, i, i))); |
614 | } | ||
615 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | exact_cubic_t exactCubic(waypoints.begin(), waypoints.end()); |
616 | // Test number of polynomials in exact cubic | ||
617 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | std::size_t numberSegments = exactCubic.getNumberSplines(); |
618 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (numberSegments != 6) { |
619 | ✗ | error = true; | |
620 | std::cout | ||
621 | ✗ | << "In ExactCubicNoErrorTest, Error While checking number of splines" | |
622 | ✗ | << numberSegments << " ; " << 6 << std::endl; | |
623 | } | ||
624 | // Test getSplineAt function | ||
625 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
|
7 | for (std::size_t i = 0; i < numberSegments; i++) { |
626 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
6 | exactCubic.getSplineAt(i); |
627 | } | ||
628 | // Other tests | ||
629 | try { | ||
630 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | exactCubic(0.0); |
631 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | exactCubic(3.0); |
632 | ✗ | } catch (...) { | |
633 | ✗ | error = true; | |
634 | std::cout << "Evaluation of ExactCubicNoErrorTest error when testing value " | ||
635 | ✗ | "on bounds\n"; | |
636 | } | ||
637 | 1 | error = true; | |
638 | try { | ||
639 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | exactCubic(3.2); |
640 | 1 | } catch (...) { | |
641 | 1 | error = false; | |
642 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | } |
643 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (error) { |
644 | std::cout << "Evaluation of exactCubic cf error, 3.2 should be an out of " | ||
645 | ✗ | "range value\n"; | |
646 | } | ||
647 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | if (!QuasiEqual(exactCubic.max(), 3.0)) { |
648 | ✗ | error = true; | |
649 | std::cout << "Evaluation of exactCubic error, MaxBound should be equal to " | ||
650 | ✗ | "3 but is : " | |
651 | ✗ | << exactCubic.max() << "\n"; | |
652 | } | ||
653 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | if (!QuasiEqual(exactCubic.min(), 0.0)) { |
654 | ✗ | error = true; | |
655 | std::cout << "Evaluation of exactCubic error, MinBound should be equal to " | ||
656 | ✗ | "0 but is : " | |
657 | ✗ | << exactCubic.min() << "\n"; | |
658 | } | ||
659 | 1 | } | |
660 | |||
661 | /*Exact Cubic Function tests*/ | ||
662 | 1 | void ExactCubicTwoPointsTest(bool& error) { | |
663 | // Create an exact cubic spline with 2 waypoints => 1 polynomial defined in | ||
664 | // [0.0,1.0] | ||
665 | 1 | ndcurves::T_Waypoint waypoints; | |
666 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
|
3 | for (double i = 0.0; i < 2.0; ++i) { |
667 |
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.
|
2 | waypoints.push_back(std::make_pair(i, point3_t(i, i, i))); |
668 | } | ||
669 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | exact_cubic_t exactCubic(waypoints.begin(), waypoints.end()); |
670 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | point3_t res1 = exactCubic(0); |
671 | std::string errmsg0( | ||
672 | "in ExactCubicTwoPointsTest, Error While checking that given wayPoints " | ||
673 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "are crossed (expected / obtained)"); |
674 |
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.
|
1 | ComparePoints(point3_t(0, 0, 0), res1, errmsg0, error); |
675 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = exactCubic(1); |
676 |
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.
|
1 | ComparePoints(point3_t(1, 1, 1), res1, errmsg0, error); |
677 | // Test number of polynomials in exact cubic | ||
678 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | std::size_t numberSegments = exactCubic.getNumberSplines(); |
679 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (numberSegments != 1) { |
680 | ✗ | error = true; | |
681 | std::cout | ||
682 | ✗ | << "In ExactCubicTwoPointsTest, Error While checking number of splines" | |
683 | ✗ | << numberSegments << " ; " << 1 << std::endl; | |
684 | } | ||
685 | // Test getSplineAt | ||
686 | std::string errmsg1( | ||
687 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "in ExactCubicTwoPointsTest, Error While checking value on curve"); |
688 |
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.
|
1 | ComparePoints(exactCubic(0.5), (exactCubic.getSplineAt(0))(0.5), errmsg1, |
689 | error); | ||
690 | 1 | } | |
691 | |||
692 | 1 | void ExactCubicOneDimTest(bool& error) { | |
693 | 1 | ndcurves::T_WaypointOne waypoints; | |
694 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point_one zero; |
695 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | zero(0, 0) = 9; |
696 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point_one one; |
697 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | one(0, 0) = 14; |
698 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point_one two; |
699 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | two(0, 0) = 25; |
700 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | waypoints.push_back(std::make_pair(0., zero)); |
701 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | waypoints.push_back(std::make_pair(1., one)); |
702 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | waypoints.push_back(std::make_pair(2., two)); |
703 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | exact_cubic_one exactCubic(waypoints.begin(), waypoints.end()); |
704 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point_one res1 = exactCubic(0); |
705 | std::string errmsg( | ||
706 | "in ExactCubicOneDim Error While checking that given wayPoints are " | ||
707 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "crossed (expected / obtained)"); |
708 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(zero, res1, errmsg, error); |
709 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | res1 = exactCubic(1); |
710 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(one, res1, errmsg, error); |
711 | 1 | } | |
712 | |||
713 | 3 | void CheckWayPointConstraint( | |
714 | const std::string& errmsg, const double step, const ndcurves::T_Waypoint&, | ||
715 | const exact_cubic_t* curve, bool& error, | ||
716 | double prec = Eigen::NumTraits<double>::dummy_precision()) { | ||
717 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | point3_t res1; |
718 |
2/2✓ Branch 0 taken 18 times.
✓ Branch 1 taken 3 times.
|
21 | for (double i = 0; i <= 1; i = i + step) { |
719 |
2/4✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18 times.
✗ Branch 5 not taken.
|
18 | res1 = (*curve)(i); |
720 |
4/8✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 18 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 18 times.
✗ Branch 11 not taken.
|
18 | ComparePoints(point3_t(i, i, i), res1, errmsg, error, prec); |
721 | } | ||
722 | 3 | } | |
723 | |||
724 | 1 | void ExactCubicPointsCrossedTest(bool& error) { | |
725 | 1 | ndcurves::T_Waypoint waypoints; | |
726 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
|
7 | for (double i = 0; i <= 1; i = i + 0.2) { |
727 |
4/8✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 6 times.
✗ Branch 11 not taken.
|
6 | waypoints.push_back(std::make_pair(i, point3_t(i, i, i))); |
728 | } | ||
729 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | exact_cubic_t exactCubic(waypoints.begin(), waypoints.end()); |
730 | std::string errmsg( | ||
731 | "Error While checking that given wayPoints are crossed (expected / " | ||
732 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "obtained)"); |
733 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CheckWayPointConstraint(errmsg, 0.2, waypoints, &exactCubic, error); |
734 | 1 | } | |
735 | |||
736 | 1 | void ExactCubicVelocityConstraintsTest(bool& error) { | |
737 | 1 | ndcurves::T_Waypoint waypoints; | |
738 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
|
7 | for (double i = 0; i <= 1; i = i + 0.2) { |
739 |
4/8✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 6 times.
✗ Branch 11 not taken.
|
6 | waypoints.push_back(std::make_pair(i, point3_t(i, i, i))); |
740 | } | ||
741 | std::string errmsg( | ||
742 | "Error in ExactCubicVelocityConstraintsTest (1); while checking that " | ||
743 | "given wayPoints are crossed (expected / " | ||
744 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "obtained)"); |
745 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | spline_constraints_t constraints(3); |
746 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.end_vel = point3_t(0, 0, 0); |
747 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.init_vel = point3_t(0, 0, 0); |
748 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.end_acc = point3_t(0, 0, 0); |
749 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.init_acc = point3_t(0, 0, 0); |
750 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | exact_cubic_t exactCubic(waypoints.begin(), waypoints.end(), constraints); |
751 | // now check that init and end velocity are 0 | ||
752 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CheckWayPointConstraint(errmsg, 0.2, waypoints, &exactCubic, error); |
753 | std::string errmsg3( | ||
754 | "Error in ExactCubicVelocityConstraintsTest (2); while checking " | ||
755 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "derivative (expected / obtained)"); |
756 | // now check derivatives | ||
757 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
1 | ComparePoints(constraints.init_vel, exactCubic.derivate(0, 1), errmsg3, error, |
758 | 1e-10); | ||
759 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
1 | ComparePoints(constraints.end_vel, exactCubic.derivate(1, 1), errmsg3, error, |
760 | 1e-10); | ||
761 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
1 | ComparePoints(constraints.init_acc, exactCubic.derivate(0, 2), errmsg3, error, |
762 | 1e-10); | ||
763 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
1 | ComparePoints(constraints.end_acc, exactCubic.derivate(1, 2), errmsg3, error, |
764 | 1e-10); | ||
765 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.end_vel = point3_t(1, 2, 3); |
766 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.init_vel = point3_t(-1, -2, -3); |
767 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.end_acc = point3_t(4, 5, 6); |
768 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.init_acc = point3_t(-4, -4, -6); |
769 | std::string errmsg2( | ||
770 | "Error in ExactCubicVelocityConstraintsTest (3); while checking that " | ||
771 | "given wayPoints are crossed (expected / " | ||
772 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "obtained)"); |
773 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | exact_cubic_t exactCubic2(waypoints.begin(), waypoints.end(), constraints); |
774 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CheckWayPointConstraint(errmsg2, 0.2, waypoints, &exactCubic2, error, 1e-10); |
775 | std::string errmsg4( | ||
776 | "Error in ExactCubicVelocityConstraintsTest (4); while checking " | ||
777 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "derivative (expected / obtained)"); |
778 | // now check derivatives | ||
779 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
1 | ComparePoints(constraints.init_vel, exactCubic2.derivate(0, 1), errmsg4, |
780 | error, 1e-10); | ||
781 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
1 | ComparePoints(constraints.end_vel, exactCubic2.derivate(1, 1), errmsg4, error, |
782 | 1e-10); | ||
783 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
1 | ComparePoints(constraints.init_acc, exactCubic2.derivate(0, 2), errmsg4, |
784 | error, 1e-10); | ||
785 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
1 | ComparePoints(constraints.end_acc, exactCubic2.derivate(1, 2), errmsg4, error, |
786 | 1e-10); | ||
787 | 1 | } | |
788 | |||
789 | template <typename CurveType> | ||
790 | 20 | void CheckPointOnline(const std::string& errmsg, const point3_t& A, | |
791 | const point3_t& B, const double target, | ||
792 | const CurveType* curve, bool& error) { | ||
793 |
2/4✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
|
20 | point3_t res1 = curve->operator()(target); |
794 |
2/4✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
|
20 | point3_t ar = (res1 - A); |
795 |
1/2✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
|
20 | ar.normalize(); |
796 |
2/4✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
|
20 | point3_t rb = (B - res1); |
797 |
1/2✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
|
20 | rb.normalize(); |
798 |
2/4✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 20 times.
|
20 | if (ar.dot(rb) < 0.99999) { |
799 | ✗ | error = true; | |
800 | ✗ | std::cout << errmsg << " ; " << A.transpose() << "\n ; " << B.transpose() | |
801 | ✗ | << "\n ; " << target << " ; " << res1.transpose() << std::endl; | |
802 | } | ||
803 | 20 | } | |
804 | |||
805 | 1 | void EffectorTrajectoryTest(bool& error) { | |
806 | // create arbitrary trajectory | ||
807 | 1 | ndcurves::T_Waypoint waypoints; | |
808 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
|
7 | for (double i = 0; i <= 10; i = i + 2) { |
809 |
4/8✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 6 times.
✗ Branch 11 not taken.
|
6 | waypoints.push_back(std::make_pair(i, point3_t(i, i, i))); |
810 | } | ||
811 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
2 | helpers::exact_cubic_t* eff_traj = helpers::effector_spline( |
812 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | waypoints.begin(), waypoints.end(), Eigen::Vector3d::UnitZ(), |
813 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | Eigen::Vector3d(0, 0, 2), 1, 0.02, 1, 0.5); |
814 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t zero(0, 0, 0); |
815 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t off1(0, 0, 1); |
816 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t off2(10, 10, 10.02); |
817 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t end(10, 10, 10); |
818 | std::string errmsg( | ||
819 | "Error in EffectorTrajectoryTest; while checking waypoints (expected / " | ||
820 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "obtained)"); |
821 | std::string errmsg2( | ||
822 | "Error in EffectorTrajectoryTest; while checking derivative (expected / " | ||
823 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "obtained)"); |
824 | // first check start / goal positions | ||
825 |
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.
|
1 | ComparePoints(zero, (*eff_traj)(0), errmsg, error); |
826 |
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.
|
1 | ComparePoints(off1, (*eff_traj)(1), errmsg, error); |
827 |
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.
|
1 | ComparePoints(off2, (*eff_traj)(9.5), errmsg, error); |
828 |
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.
|
1 | ComparePoints(end, (*eff_traj)(10), errmsg, error); |
829 | // now check derivatives | ||
830 |
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.
|
1 | ComparePoints(zero, (*eff_traj).derivate(0, 1), errmsg2, error); |
831 |
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.
|
1 | ComparePoints(zero, (*eff_traj).derivate(10, 1), errmsg2, error); |
832 |
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.
|
1 | ComparePoints(zero, (*eff_traj).derivate(0, 2), errmsg2, error); |
833 |
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.
|
1 | ComparePoints(zero, (*eff_traj).derivate(10, 2), errmsg2, error); |
834 | // check that end and init splines are line | ||
835 | std::string errmsg3( | ||
836 | "Error in EffectorTrajectoryTest; while checking that init/end splines " | ||
837 | "are line (point A/ point B, time value / " | ||
838 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "point obtained) \n"); |
839 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
|
11 | for (double i = 0.1; i < 1; i += 0.1) { |
840 |
3/6✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
|
20 | CheckPointOnline<helpers::exact_cubic_t>( |
841 |
2/4✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
30 | errmsg3, (*eff_traj)(0), (*eff_traj)(1), i, eff_traj, error); |
842 | } | ||
843 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
|
11 | for (double i = 9.981; i < 10; i += 0.002) { |
844 |
3/6✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
|
20 | CheckPointOnline<helpers::exact_cubic_t>( |
845 |
2/4✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
30 | errmsg3, (*eff_traj)(9.5), (*eff_traj)(10), i, eff_traj, error); |
846 | } | ||
847 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | delete eff_traj; |
848 | 1 | } | |
849 | |||
850 | 6 | helpers::quat_t GetXRotQuat(const double theta) { | |
851 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
6 | Eigen::AngleAxisd m(theta, Eigen::Vector3d::UnitX()); |
852 |
3/6✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 6 times.
✗ Branch 9 not taken.
|
12 | return helpers::quat_t(Eigen::Quaterniond(m).coeffs().data()); |
853 | } | ||
854 | |||
855 | ✗ | double GetXRotFromQuat(helpers::quat_ref_const_t q) { | |
856 | ✗ | Eigen::Quaterniond quat(q.data()); | |
857 | ✗ | Eigen::AngleAxisd m(quat); | |
858 | ✗ | return m.angle() / M_PI * 180.; | |
859 | } | ||
860 | |||
861 | 1 | void EffectorSplineRotationNoRotationTest(bool& error) { | |
862 | // create arbitrary trajectory | ||
863 | 1 | ndcurves::T_Waypoint waypoints; | |
864 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
|
7 | for (double i = 0; i <= 10; i = i + 2) { |
865 |
4/8✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 6 times.
✗ Branch 11 not taken.
|
6 | waypoints.push_back(std::make_pair(i, point3_t(i, i, i))); |
866 | } | ||
867 | helpers::effector_spline_rotation eff_traj(waypoints.begin(), | ||
868 |
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 27 taken 1 times.
✗ Branch 28 not taken.
|
1 | waypoints.end()); |
869 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::config_t q_init; |
870 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
1 | q_init << 0., 0., 0., 0., 0., 0., 1.; |
871 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::config_t q_end; |
872 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
1 | q_end << 10., 10., 10., 0., 0., 0., 1.; |
873 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::config_t q_to; |
874 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
1 | q_to << 0., 0, 0.02, 0., 0., 0., 1.; |
875 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::config_t q_land; |
876 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
1 | q_land << 10, 10, 10.02, 0, 0., 0., 1.; |
877 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::config_t q_mod; |
878 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
1 | q_mod << 6., 6., 6., 0., 0., 0., 1.; |
879 | std::string errmsg( | ||
880 | "Error in EffectorSplineRotationNoRotationTest; while checking waypoints " | ||
881 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "(expected / obtained)"); |
882 |
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.
|
1 | ComparePoints(q_init, eff_traj(0), errmsg, error); |
883 |
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.
|
1 | ComparePoints(q_to, eff_traj(0.02), errmsg, error); |
884 |
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.
|
1 | ComparePoints(q_land, eff_traj(9.98), errmsg, error); |
885 |
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.
|
1 | ComparePoints(q_mod, eff_traj(6), errmsg, error); |
886 |
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.
|
1 | ComparePoints(q_end, eff_traj(10), errmsg, error); |
887 | 1 | } | |
888 | |||
889 | 1 | void EffectorSplineRotationRotationTest(bool& error) { | |
890 | // create arbitrary trajectory | ||
891 | 1 | ndcurves::T_Waypoint waypoints; | |
892 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
|
7 | for (double i = 0; i <= 10; i = i + 2) { |
893 |
4/8✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 6 times.
✗ Branch 11 not taken.
|
6 | waypoints.push_back(std::make_pair(i, point3_t(i, i, i))); |
894 | } | ||
895 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::quat_t init_quat = GetXRotQuat(M_PI); |
896 | helpers::effector_spline_rotation eff_traj(waypoints.begin(), waypoints.end(), | ||
897 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
|
1 | init_quat); |
898 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | helpers::config_t q_init = helpers::config_t::Zero(); |
899 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | q_init.tail<4>() = init_quat; |
900 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::config_t q_end; |
901 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
1 | q_end << 10., 10., 10., 0., 0., 0., 1.; |
902 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::config_t q_to = q_init; |
903 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | q_to(2) += 0.02; |
904 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::config_t q_land = q_end; |
905 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | q_land(2) += 0.02; |
906 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::quat_t q_mod = GetXRotQuat(M_PI_2); |
907 | ; | ||
908 | std::string errmsg( | ||
909 | "Error in EffectorSplineRotationRotationTest; while checking waypoints " | ||
910 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "(expected / obtained)"); |
911 |
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.
|
1 | ComparePoints(q_init, eff_traj(0), errmsg, error); |
912 |
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.
|
1 | ComparePoints(q_to, eff_traj(0.02), errmsg, error); |
913 |
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.
|
1 | ComparePoints(q_land, eff_traj(9.98), errmsg, error); |
914 |
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.
|
1 | ComparePoints(q_mod, eff_traj(5).tail<4>(), errmsg, error); |
915 |
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.
|
1 | ComparePoints(q_end, eff_traj(10), errmsg, error); |
916 | 1 | } | |
917 | |||
918 | 1 | void EffectorSplineRotationWayPointRotationTest(bool& error) { | |
919 | // create arbitrary trajectory | ||
920 | 1 | ndcurves::T_Waypoint waypoints; | |
921 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
|
7 | for (double i = 0; i <= 10; i = i + 2) { |
922 |
4/8✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 6 times.
✗ Branch 11 not taken.
|
6 | waypoints.push_back(std::make_pair(i, point3_t(i, i, i))); |
923 | } | ||
924 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::quat_t init_quat = GetXRotQuat(0); |
925 | 1 | helpers::t_waypoint_quat_t quat_waypoints_; | |
926 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::quat_t q_pi_0 = GetXRotQuat(0); |
927 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::quat_t q_pi_2 = GetXRotQuat(M_PI_2); |
928 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::quat_t q_pi = GetXRotQuat(M_PI); |
929 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | quat_waypoints_.push_back(std::make_pair(0.4, q_pi_0)); |
930 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | quat_waypoints_.push_back(std::make_pair(6, q_pi_2)); |
931 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | quat_waypoints_.push_back(std::make_pair(8, q_pi)); |
932 | helpers::effector_spline_rotation eff_traj(waypoints.begin(), waypoints.end(), | ||
933 | quat_waypoints_.begin(), | ||
934 |
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 17 taken 1 times.
✗ Branch 18 not taken.
|
2 | quat_waypoints_.end()); |
935 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | helpers::config_t q_init = helpers::config_t::Zero(); |
936 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | q_init.tail<4>() = init_quat; |
937 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::config_t q_end; |
938 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
1 | q_end << 10., 10., 10., 0., 0., 0., 1.; |
939 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | q_end.tail<4>() = q_pi; |
940 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::config_t q_mod; |
941 |
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 | q_mod.head<3>() = point3_t(6, 6, 6); |
942 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | q_mod.tail<4>() = q_pi_2; |
943 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::config_t q_to = q_init; |
944 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | q_to(2) += 0.02; |
945 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | helpers::config_t q_land = q_end; |
946 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | q_land(2) += 0.02; |
947 | std::string errmsg( | ||
948 | "Error in EffectorSplineRotationWayPointRotationTest; while checking " | ||
949 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "waypoints (expected / obtained)"); |
950 |
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.
|
1 | ComparePoints(q_init, eff_traj(0), errmsg, error); |
951 |
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.
|
1 | ComparePoints(q_to, eff_traj(0.02), errmsg, error); |
952 |
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.
|
1 | ComparePoints(q_land, eff_traj(9.98), errmsg, error); |
953 |
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.
|
1 | ComparePoints(q_mod, eff_traj(6), errmsg, error); |
954 |
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.
|
1 | ComparePoints(q_end, eff_traj(10), errmsg, error); |
955 | 1 | } | |
956 | |||
957 | 1 | void TestReparametrization(bool& error) { | |
958 |
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 | helpers::rotation_spline s; |
959 | 1 | const helpers::exact_cubic_constraint_one_dim& sp = s.time_reparam_; | |
960 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | if (!QuasiEqual(sp.min(), 0.0)) { |
961 | ✗ | std::cout << "in TestReparametrization; min value is not 0, got " | |
962 | ✗ | << sp.min() << std::endl; | |
963 | ✗ | error = true; | |
964 | } | ||
965 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | if (!QuasiEqual(sp.max(), 1.0)) { |
966 | ✗ | std::cout << "in TestReparametrization; max value is not 1, got " | |
967 | ✗ | << sp.max() << std::endl; | |
968 | ✗ | error = true; | |
969 | } | ||
970 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (!QuasiEqual(sp(1)[0], 1.0)) { |
971 | ✗ | std::cout << "in TestReparametrization; end value is not 1, got " | |
972 | ✗ | << sp(1)[0] << std::endl; | |
973 | ✗ | error = true; | |
974 | } | ||
975 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (!QuasiEqual(sp(0)[0], 0.0)) { |
976 | ✗ | std::cout << "in TestReparametrization; init value is not 0, got " | |
977 | ✗ | << sp(0)[0] << std::endl; | |
978 | ✗ | error = true; | |
979 | } | ||
980 |
2/2✓ Branch 0 taken 500 times.
✓ Branch 1 taken 1 times.
|
501 | for (double i = 0; i < 1; i += 0.002) { |
981 |
5/10✓ Branch 1 taken 500 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 500 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 500 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 500 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 500 times.
|
500 | if (sp(i)[0] > sp(i + 0.002)[0]) { |
982 | ✗ | std::cout << "in TestReparametrization; reparametrization not monotonous " | |
983 | ✗ | << sp.max() << std::endl; | |
984 | ✗ | error = true; | |
985 | } | ||
986 | } | ||
987 | 1 | } | |
988 | |||
989 | 6 | point3_t randomPoint(const double min, const double max) { | |
990 | 6 | point3_t p; | |
991 |
2/2✓ Branch 0 taken 18 times.
✓ Branch 1 taken 6 times.
|
24 | for (size_t i = 0; i < 3; ++i) { |
992 | 18 | p[i] = (rand() / (double)RAND_MAX) * (max - min) + min; | |
993 | } | ||
994 | 6 | return p; | |
995 | } | ||
996 | |||
997 | 1 | void BezierEvalDeCasteljau(bool& error) { | |
998 | using namespace std; | ||
999 | 1 | std::vector<double> values; | |
1000 |
2/2✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 1 times.
|
100001 | for (int i = 0; i < 100000; ++i) { |
1001 |
1/2✓ Branch 2 taken 100000 times.
✗ Branch 3 not taken.
|
100000 | values.push_back(rand() / RAND_MAX); |
1002 | } | ||
1003 | // first compare regular evaluation (low dim pol) | ||
1004 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 2, 3); |
1005 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 3, 4); |
1006 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 4, 5); |
1007 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d(3, 6, 7); |
1008 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t e(3, 61, 7); |
1009 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t f(3, 56, 7); |
1010 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t g(3, 36, 7); |
1011 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t h(43, 6, 7); |
1012 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t i(3, 6, 77); |
1013 | 1 | std::vector<point3_t> params; | |
1014 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(a); |
1015 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(b); |
1016 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(c); |
1017 | // 3d curve | ||
1018 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t cf(params.begin(), params.end()); |
1019 | std::string errmsg( | ||
1020 | "Error in BezierEvalDeCasteljau; while comparing actual bezier " | ||
1021 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "evaluation and de Casteljau : "); |
1022 | 1 | for (std::vector<double>::const_iterator cit = values.begin(); | |
1023 |
2/2✓ Branch 2 taken 100000 times.
✓ Branch 3 taken 1 times.
|
100001 | cit != values.end(); ++cit) { |
1024 |
5/10✓ Branch 3 taken 100000 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 100000 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 100000 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 100000 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 100000 times.
✗ Branch 17 not taken.
|
100000 | ComparePoints(cf.evalDeCasteljau(*cit), cf(*cit), errmsg, error); |
1025 | } | ||
1026 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(d); |
1027 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(e); |
1028 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(f); |
1029 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(g); |
1030 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(h); |
1031 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(i); |
1032 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t cf2(params.begin(), params.end()); |
1033 | 1 | for (std::vector<double>::const_iterator cit = values.begin(); | |
1034 |
2/2✓ Branch 2 taken 100000 times.
✓ Branch 3 taken 1 times.
|
100001 | cit != values.end(); ++cit) { |
1035 |
5/10✓ Branch 3 taken 100000 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 100000 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 100000 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 100000 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 100000 times.
✗ Branch 17 not taken.
|
100000 | ComparePoints(cf2.evalDeCasteljau(*cit), cf2(*cit), errmsg, error); |
1036 | } | ||
1037 | 1 | } | |
1038 | |||
1039 | 1 | void BezierElevate(bool& error) { | |
1040 | using namespace std; | ||
1041 | 1 | std::vector<double> values; | |
1042 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
|
11 | for (int i = 0; i < 10; ++i) { |
1043 |
1/2✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
10 | values.push_back(double(rand()) / double(RAND_MAX)); |
1044 | } | ||
1045 | // first compare regular evaluation (low dim pol) | ||
1046 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 2, 3); |
1047 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 3, 4); |
1048 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 4, 5); |
1049 | 1 | std::vector<point3_t> params; | |
1050 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(a); |
1051 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(b); |
1052 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(c); |
1053 | // 3d curve | ||
1054 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t cf(params.begin(), params.end()); |
1055 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bezier_t cf2 = cf.elevate(1); |
1056 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bezier_t cf3 = cf2.elevate(1); |
1057 |
2/6✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
1 | if (cf2.degree() - cf.degree() != 1 && cf3.degree() - cf.degree() != 2) { |
1058 | ✗ | error = true; | |
1059 | std::string errmsg( | ||
1060 | "Error in BezierElevate; Degree mismatched for elevated curves. " | ||
1061 | ✗ | "Expected 1 / 2, got: "); | |
1062 | ✗ | std::cout << errmsg << cf2.degree() - cf.degree() << " ; " | |
1063 | ✗ | << cf3.degree() - cf.degree() << std::endl; | |
1064 | } | ||
1065 | std::string errmsg( | ||
1066 | "Error in BezierElevate; Elevated curves do not have the same evaluation " | ||
1067 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | ": "); |
1068 | 1 | for (std::vector<double>::const_iterator cit = values.begin(); | |
1069 |
2/2✓ Branch 3 taken 9 times.
✓ Branch 4 taken 1 times.
|
10 | cit != values.end() - 1; ++cit) { |
1070 |
5/10✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 9 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 9 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 9 times.
✗ Branch 17 not taken.
|
9 | ComparePoints(cf2(*cit), cf(*(cit)), errmsg, error); |
1071 |
5/10✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 9 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 9 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 9 times.
✗ Branch 17 not taken.
|
9 | ComparePoints(cf3(*cit), cf(*cit), errmsg, error); |
1072 | } | ||
1073 | 1 | } | |
1074 | |||
1075 | /** | ||
1076 | * @brief BezierSplitCurve test the 'split' method of bezier curve | ||
1077 | * @param error | ||
1078 | */ | ||
1079 | 1 | void BezierSplitCurve(bool& error) { | |
1080 | // test for degree 5 | ||
1081 | 1 | size_t n = 5; | |
1082 | 1 | double t_min = 0.2; | |
1083 | 1 | double t_max = 10; | |
1084 | double aux0, aux1; | ||
1085 | std::string errMsg0( | ||
1086 | "BezierSplitCurve, ERROR initial point of the splitted curve doesn't " | ||
1087 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "correspond to the original"); |
1088 | std::string errMsg1( | ||
1089 | "BezierSplitCurve, ERROR splitting point of the splitted curve doesn't " | ||
1090 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "correspond to the original"); |
1091 | std::string errMsg2( | ||
1092 | "BezierSplitCurve, ERROR final point of the splitted curve doesn't " | ||
1093 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "correspond to the original"); |
1094 | std::string errMsg3( | ||
1095 | "BezierSplitCurve, ERROR while checking value on curve and curves " | ||
1096 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "splitted"); |
1097 | std::string errMsg4( | ||
1098 | "BezierSplitCurve, ERROR Degree of the splitted curve are not the same " | ||
1099 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "as the original curve"); |
1100 | std::string errMsg5( | ||
1101 | "BezierSplitCurve, ERROR duration of the splitted curve doesn't " | ||
1102 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "correspond to the original"); |
1103 | std::string errMsg6( | ||
1104 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "BezierSplitCurve, ERROR while checking value on curve extracted"); |
1105 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
|
2 | for (size_t i = 0; i < 1; ++i) { |
1106 | // build a random curve and split it at random time : | ||
1107 | // std::cout<<"build a random curve"<<std::endl; | ||
1108 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a; |
1109 | 1 | std::vector<point3_t> wps; | |
1110 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
|
7 | for (size_t j = 0; j <= n; ++j) { |
1111 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
6 | wps.push_back(randomPoint(-10., 10.)); |
1112 | } | ||
1113 | 1 | double t0 = (rand() / (double)RAND_MAX) * (t_max - t_min) + t_min; | |
1114 | 1 | double t1 = (rand() / (double)RAND_MAX) * (t_max - t0) + t0; | |
1115 | 1 | double ts = (rand() / (double)RAND_MAX) * (t1 - t0) + t0; | |
1116 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t c(wps.begin(), wps.end(), t0, t1); |
1117 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | std::pair<bezier_t, bezier_t> cs = c.split(ts); |
1118 | // test on splitted curves : | ||
1119 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | if (!((c.degree_ == cs.first.degree_) && |
1120 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | (c.degree_ == cs.second.degree_))) { |
1121 | ✗ | error = true; | |
1122 | ✗ | std::cout << errMsg4 << std::endl; | |
1123 | } | ||
1124 | 1 | aux0 = c.max() - c.min(); | |
1125 | 1 | aux1 = | |
1126 | 1 | (cs.first.max() - cs.first.min() + cs.second.max() - cs.second.min()); | |
1127 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (!QuasiEqual(aux0, aux1)) { |
1128 | ✗ | error = true; | |
1129 | ✗ | std::cout << errMsg5 << std::endl; | |
1130 | } | ||
1131 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | if (!QuasiEqual(cs.first.max(), ts)) { |
1132 | ✗ | error = true; | |
1133 | ✗ | std::cout << errMsg0 << std::endl; | |
1134 | } | ||
1135 |
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.
|
1 | ComparePoints(c(t0), cs.first(t0), errMsg0, error); |
1136 |
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.
|
1 | ComparePoints(cs.first(ts), cs.second(ts), errMsg1, error); |
1137 |
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 15 taken 1 times.
✗ Branch 16 not taken.
|
1 | ComparePoints(c(t1), cs.second(cs.second.max()), errMsg2, error); |
1138 | // check along curve : | ||
1139 | 1 | double ti = t0; | |
1140 |
2/2✓ Branch 0 taken 55 times.
✓ Branch 1 taken 1 times.
|
56 | while (ti <= ts) { |
1141 |
5/10✓ Branch 2 taken 55 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 55 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 55 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 55 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 55 times.
✗ Branch 15 not taken.
|
55 | ComparePoints(cs.first(ti), c(ti), errMsg3, error); |
1142 | 55 | ti += 0.01; | |
1143 | } | ||
1144 |
2/2✓ Branch 0 taken 85 times.
✓ Branch 1 taken 1 times.
|
86 | while (ti <= t1) { |
1145 |
5/10✓ Branch 2 taken 85 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 85 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 85 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 85 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 85 times.
✗ Branch 15 not taken.
|
85 | ComparePoints(cs.second(ti), c(ti), errMsg3, error); |
1146 | 85 | ti += 0.01; | |
1147 | } | ||
1148 | // Test extract function | ||
1149 | bezier_t bezier_extracted0 = | ||
1150 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | c.extract(t0 + 0.01, t1 - 0.01); // T_min < t0 < t1 < T_max |
1151 |
2/2✓ Branch 2 taken 138 times.
✓ Branch 3 taken 1 times.
|
139 | for (double t = bezier_extracted0.min(); t < bezier_extracted0.max(); |
1152 | 138 | t += 0.01) { | |
1153 |
5/10✓ Branch 2 taken 138 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 138 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 138 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 138 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 138 times.
✗ Branch 15 not taken.
|
138 | ComparePoints(bezier_extracted0(t), c(t), errMsg6, error); |
1154 | } | ||
1155 | bezier_t bezier_extracted1 = | ||
1156 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | c.extract(t0, t1 - 0.01); // T_min = t0 < t1 < T_max |
1157 |
2/2✓ Branch 2 taken 139 times.
✓ Branch 3 taken 1 times.
|
140 | for (double t = bezier_extracted1.min(); t < bezier_extracted1.max(); |
1158 | 139 | t += 0.01) { | |
1159 |
5/10✓ Branch 2 taken 139 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 139 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 139 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 139 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 139 times.
✗ Branch 15 not taken.
|
139 | ComparePoints(bezier_extracted1(t), c(t), errMsg6, error); |
1160 | } | ||
1161 | bezier_t bezier_extracted2 = | ||
1162 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | c.extract(t0 + 0.01, t1); // T_min < t0 < t1 = T_max |
1163 |
2/2✓ Branch 2 taken 139 times.
✓ Branch 3 taken 1 times.
|
140 | for (double t = bezier_extracted2.min(); t < bezier_extracted2.max(); |
1164 | 139 | t += 0.01) { | |
1165 |
5/10✓ Branch 2 taken 139 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 139 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 139 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 139 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 139 times.
✗ Branch 15 not taken.
|
139 | ComparePoints(bezier_extracted2(t), c(t), errMsg6, error); |
1166 | } | ||
1167 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bezier_t bezier_extracted3 = c.extract(t0, t1); // T_min = t0 < t1 = T_max |
1168 |
2/2✓ Branch 2 taken 140 times.
✓ Branch 3 taken 1 times.
|
141 | for (double t = bezier_extracted3.min(); t < bezier_extracted3.max(); |
1169 | 140 | t += 0.01) { | |
1170 |
5/10✓ Branch 2 taken 140 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 140 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 140 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 140 times.
✗ Branch 15 not taken.
|
140 | ComparePoints(bezier_extracted3(t), c(t), errMsg6, error); |
1171 | } | ||
1172 | 1 | } | |
1173 | 1 | } | |
1174 | |||
1175 | /* cubic hermite spline function test */ | ||
1176 | 1 | void CubicHermitePairsPositionDerivativeTest(bool& error) { | |
1177 | try { | ||
1178 | std::string errmsg1( | ||
1179 | "in Cubic Hermite 2 pairs (pos,vel), Error While checking that given " | ||
1180 | "wayPoints are crossed (expected / " | ||
1181 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "obtained) : "); |
1182 | std::string errmsg2( | ||
1183 | "in Cubic Hermite 2 points, Error While checking value of point on " | ||
1184 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "curve : "); |
1185 | std::string errmsg3( | ||
1186 | "in Cubic Hermite 2 points, Error While checking value of tangent on " | ||
1187 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "curve : "); |
1188 | 1 | std::vector<pair_point_tangent_t> control_points; | |
1189 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t res1; |
1190 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t p0(0., 0., 0.); |
1191 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t p1(1., 2., 3.); |
1192 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t p2(4., 4., 4.); |
1193 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t t0(0.5, 0.5, 0.5); |
1194 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t t1(0.1, 0.2, -0.5); |
1195 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t t2(0.1, 0.2, 0.3); |
1196 | 1 | std::vector<double> time_control_points, time_control_points_test; | |
1197 | // Two pairs | ||
1198 | 1 | control_points.clear(); | |
1199 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | control_points.push_back(pair_point_tangent_t(p0, t0)); |
1200 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | control_points.push_back(pair_point_tangent_t(p1, t1)); |
1201 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points.push_back(0.); // Time at P0 |
1202 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points.push_back(1.); // Time at P1 |
1203 | // Create cubic hermite spline | ||
1204 | cubic_hermite_spline_t cubic_hermite_spline_1Pair( | ||
1205 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | control_points.begin(), control_points.end(), time_control_points); |
1206 | // Dimension | ||
1207 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (cubic_hermite_spline_1Pair.dim() != 3) { |
1208 | ✗ | error = true; | |
1209 | std::cout | ||
1210 | ✗ | << "Cubic hermite spline test, Error : Dimension of curve is wrong\n"; | |
1211 | } | ||
1212 | // Check | ||
1213 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_1Pair(0.); // t=0 |
1214 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(p0, res1, errmsg1, error); |
1215 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_1Pair(1.); // t=1 |
1216 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(p1, res1, errmsg1, error); |
1217 | // Test derivative : two pairs | ||
1218 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_1Pair.derivate(0., 1); |
1219 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(t0, res1, errmsg3, error); |
1220 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_1Pair.derivate(1., 1); |
1221 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(t1, res1, errmsg3, error); |
1222 | // Three pairs | ||
1223 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | control_points.push_back(pair_point_tangent_t(p2, t2)); |
1224 | 1 | time_control_points.clear(); | |
1225 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points.push_back(0.); // Time at P0 |
1226 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points.push_back(2.); // Time at P1 |
1227 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points.push_back(5.); // Time at P2 |
1228 | cubic_hermite_spline_t cubic_hermite_spline_2Pairs( | ||
1229 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | control_points.begin(), control_points.end(), time_control_points); |
1230 | // Check | ||
1231 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_2Pairs(0.); // t=0 |
1232 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(p0, res1, errmsg1, error); |
1233 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_2Pairs(2.); // t=2 |
1234 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(p1, res1, errmsg2, error); |
1235 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_2Pairs(5.); // t=5 |
1236 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(p2, res1, errmsg1, error); |
1237 | // Test derivative : three pairs | ||
1238 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_2Pairs.derivate(0., 1); |
1239 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(t0, res1, errmsg3, error); |
1240 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_2Pairs.derivate(2., 1); |
1241 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(t1, res1, errmsg3, error); |
1242 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_2Pairs.derivate(5., 1); |
1243 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(t2, res1, errmsg3, error); |
1244 | // Test time control points by default [0,1] => with N control points : | ||
1245 | // Time at P0= 0. | Time at P1= 1.0/(N-1) | Time at P2= 2.0/(N-1) | ... | | ||
1246 | // Time at P_(N-1)= (N-1)/(N-1)= 1.0 | ||
1247 | 1 | time_control_points_test.clear(); | |
1248 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points_test.push_back(0.); // Time at P0 |
1249 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points_test.push_back(0.5); // Time at P1 |
1250 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points_test.push_back(1.0); // Time at P2 |
1251 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | cubic_hermite_spline_2Pairs.setTime(time_control_points_test); |
1252 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_2Pairs(0.); // t=0 |
1253 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(p0, res1, errmsg1, error); |
1254 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_2Pairs(0.5); // t=0.5 |
1255 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(p1, res1, errmsg2, error); |
1256 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_2Pairs(1.); // t=1 |
1257 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(p2, res1, errmsg1, error); |
1258 | // Test getTime | ||
1259 | try { | ||
1260 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | cubic_hermite_spline_2Pairs.getTime(); |
1261 | ✗ | } catch (...) { | |
1262 | ✗ | error = false; | |
1263 | } | ||
1264 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (error) { |
1265 | ✗ | std::cout << "Cubic hermite spline test, Error when calling getTime\n"; | |
1266 | } | ||
1267 | // Test derivative : three pairs, time default | ||
1268 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_2Pairs.derivate(0., 1); |
1269 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(t0, res1, errmsg3, error); |
1270 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_2Pairs.derivate(0.5, 1); |
1271 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(t1, res1, errmsg3, error); |
1272 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res1 = cubic_hermite_spline_2Pairs.derivate(1., 1); |
1273 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(t2, res1, errmsg3, error); |
1274 | |||
1275 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t p_derivate, p_compute_derivate; |
1276 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
|
5 | for (size_t order = 1; order < 5; ++order) { |
1277 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | std::stringstream ss; |
1278 | ss << "in Cubic Hermite 2 points, " | ||
1279 | "compute_derivate do not lead to the same results as derivate for " | ||
1280 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | "order = "; |
1281 |
2/4✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
|
4 | ss << order << std::endl; |
1282 | curve_ptr_t derivate_ptr( | ||
1283 |
2/4✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
|
4 | cubic_hermite_spline_2Pairs.compute_derivate_ptr(order)); |
1284 | 4 | double t = 0.; | |
1285 |
2/2✓ Branch 0 taken 44 times.
✓ Branch 1 taken 4 times.
|
48 | while (t <= 1.) { |
1286 |
1/2✓ Branch 1 taken 44 times.
✗ Branch 2 not taken.
|
44 | p_derivate = cubic_hermite_spline_2Pairs.derivate(t, order); |
1287 |
1/2✓ Branch 2 taken 44 times.
✗ Branch 3 not taken.
|
44 | p_compute_derivate = derivate_ptr->operator()(t); |
1288 |
4/8✓ Branch 2 taken 44 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 44 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 44 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 44 times.
✗ Branch 12 not taken.
|
44 | ComparePoints(p_derivate, p_compute_derivate, ss.str(), error); |
1289 | 44 | t += 0.1; | |
1290 | } | ||
1291 | 4 | } | |
1292 | 1 | } catch (...) { | |
1293 | ✗ | error = true; | |
1294 | ✗ | std::cout << "Error in CubicHermitePairsPositionDerivativeTest" | |
1295 | ✗ | << std::endl; | |
1296 | } | ||
1297 | 1 | } | |
1298 | |||
1299 | 1 | void piecewiseCurveTest(bool& error) { | |
1300 | try { | ||
1301 | // TEST WITH POLYNOMIALS | ||
1302 | std::string errmsg1( | ||
1303 | "in piecewise polynomial curve test, Error While checking value of " | ||
1304 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "point on curve : "); |
1305 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 1, 1); // in [0,1[ |
1306 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 1, 1); // in [1,2[ |
1307 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 1, 1); // in [2,3] |
1308 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t res; |
1309 |
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 | t_pointX_t vec1, vec2, vec3; |
1310 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec1.push_back(a); // x=1, y=1, z=1 |
1311 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec2.push_back(b); // x=2, y=1, z=1 |
1312 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec3.push_back(c); // x=3, y=1, z=1 |
1313 | // Create three polynomials of constant value in the interval of definition | ||
1314 | std::shared_ptr<polynomial_t> pol1_ptr = | ||
1315 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | std::make_shared<polynomial_t>(vec1.begin(), vec1.end(), 0, 1); |
1316 | std::shared_ptr<polynomial_t> pol2_ptr = | ||
1317 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | std::make_shared<polynomial_t>(vec2.begin(), vec2.end(), 1, 2); |
1318 | std::shared_ptr<polynomial_t> pol3_ptr = | ||
1319 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | std::make_shared<polynomial_t>(vec3.begin(), vec3.end(), 2, 3); |
1320 | // 1 polynomial in curve | ||
1321 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | piecewise_t pc(pol1_ptr); |
1322 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = pc(0.5); |
1323 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(a, res, errmsg1, error); |
1324 | // 3 polynomials in curve | ||
1325 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | pc.add_curve_ptr(pol2_ptr); |
1326 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | pc.add_curve_ptr(pol3_ptr); |
1327 | // Check values on piecewise curve | ||
1328 | // t in [0,1[ -> res=a | ||
1329 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = pc(0.); |
1330 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(a, res, errmsg1, error); |
1331 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = pc(0.5); |
1332 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(a, res, errmsg1, error); |
1333 | // t in [1,2[ -> res=b | ||
1334 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = pc(1.0); |
1335 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(b, res, errmsg1, error); |
1336 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = pc(1.5); |
1337 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(b, res, errmsg1, error); |
1338 | // t in [2,3] -> res=c | ||
1339 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = pc(2.0); |
1340 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(c, res, errmsg1, error); |
1341 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = pc(3.0); |
1342 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(c, res, errmsg1, error); |
1343 | // Create piecewise curve C0 from bezier | ||
1344 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a0(1, 2, 3); |
1345 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b0(2, 3, 4); |
1346 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c0(3, 4, 5); |
1347 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d0(4, 5, 6); |
1348 | 1 | std::vector<point3_t> params0; | |
1349 | 1 | std::vector<point3_t> params1; | |
1350 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params0.push_back(a0); // bezier between [0,1] |
1351 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params0.push_back(b0); |
1352 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params0.push_back(c0); |
1353 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params0.push_back(d0); |
1354 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params1.push_back(d0); // bezier between [1,2] |
1355 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params1.push_back(c0); |
1356 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params1.push_back(b0); |
1357 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params1.push_back(a0); |
1358 | std::shared_ptr<bezier_t> bc0_ptr = | ||
1359 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | std::make_shared<bezier_t>(params0.begin(), params0.end(), 0., 1.); |
1360 | std::shared_ptr<bezier_t> bc1_ptr = | ||
1361 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | std::make_shared<bezier_t>(params1.begin(), params1.end(), 1., 2.); |
1362 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | piecewise_t pc_C0(bc0_ptr); |
1363 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | pc_C0.add_curve_ptr(bc1_ptr); |
1364 | // Check value in t=0.5 and t=1.5 | ||
1365 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = pc_C0(0.0); |
1366 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(a0, res, errmsg1, error); |
1367 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = pc_C0(1.0); |
1368 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(d0, res, errmsg1, error); |
1369 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = pc_C0(2.0); |
1370 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | ComparePoints(a0, res, errmsg1, error); |
1371 | // Create piecewise curve C1 from Hermite | ||
1372 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t p0(0., 0., 0.); |
1373 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t p1(1., 2., 3.); |
1374 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t p2(4., 4., 4.); |
1375 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t t0(0.5, 0.5, 0.5); |
1376 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t t1(0.1, 0.2, -0.5); |
1377 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t t2(0.1, 0.2, 0.3); |
1378 | 1 | std::vector<pair_point_tangent_t> control_points_0; | |
1379 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | control_points_0.push_back(pair_point_tangent_t(p0, t0)); |
1380 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points_0.push_back( |
1381 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | pair_point_tangent_t(p1, t1)); // control_points_0 = 1st piece of curve |
1382 | 1 | std::vector<pair_point_tangent_t> control_points_1; | |
1383 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | control_points_1.push_back(pair_point_tangent_t(p1, t1)); |
1384 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points_1.push_back( |
1385 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | pair_point_tangent_t(p2, t2)); // control_points_1 = 2nd piece of curve |
1386 | 1 | std::vector<double> time_control_points0, time_control_points1; | |
1387 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points0.push_back(0.); |
1388 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points0.push_back(1.); // hermite 0 between [0,1] |
1389 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points1.push_back(1.); |
1390 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points1.push_back(3.); // hermite 1 between [1,3] |
1391 | std::shared_ptr<cubic_hermite_spline_t> chs0_ptr = | ||
1392 | 1 | std::make_shared<cubic_hermite_spline_t>(control_points_0.begin(), | |
1393 | 1 | control_points_0.end(), | |
1394 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points0); |
1395 | std::shared_ptr<cubic_hermite_spline_t> chs1_ptr = | ||
1396 | 1 | std::make_shared<cubic_hermite_spline_t>(control_points_1.begin(), | |
1397 | 1 | control_points_1.end(), | |
1398 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points1); |
1399 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | piecewise_t pc_C1(chs0_ptr); |
1400 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | pc_C1.add_curve_ptr(chs1_ptr); |
1401 | // Create piecewise curve C2 | ||
1402 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a1(0, 0, 0); |
1403 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b1(1, 1, 1); |
1404 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | t_pointX_t veca, vecb; |
1405 | // in [0,1[ | ||
1406 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | veca.push_back(a1); |
1407 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | veca.push_back(b1); // x=t, y=t, z=t |
1408 | // in [1,2] | ||
1409 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vecb.push_back(b1); |
1410 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vecb.push_back(b1); // x=(t-1)+1, y=(t-1)+1, z=(t-1)+1 |
1411 | std::shared_ptr<polynomial_t> pola_ptr = | ||
1412 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | std::make_shared<polynomial_t>(veca.begin(), veca.end(), 0, 1); |
1413 | std::shared_ptr<polynomial_t> polb_ptr = | ||
1414 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | std::make_shared<polynomial_t>(vecb.begin(), vecb.end(), 1, 2); |
1415 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | piecewise_t pc_C2(pola_ptr); |
1416 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | pc_C2.add_curve_ptr(polb_ptr); |
1417 | // check C0 continuity | ||
1418 | std::string errmsg2( | ||
1419 | "in piecewise polynomial curve test, Error while checking continuity " | ||
1420 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "C0 on "); |
1421 | std::string errmsg3( | ||
1422 | "in piecewise polynomial curve test, Error while checking continuity " | ||
1423 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "C1 on "); |
1424 | std::string errmsg4( | ||
1425 | "in piecewise polynomial curve test, Error while checking continuity " | ||
1426 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "C2 on "); |
1427 | // not C0 | ||
1428 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bool isC0 = pc.is_continuous(0); |
1429 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (isC0) { |
1430 | ✗ | std::cout << errmsg2 << " pc " << std::endl; | |
1431 | ✗ | error = true; | |
1432 | } | ||
1433 | // C0 | ||
1434 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | isC0 = pc_C0.is_continuous(0); |
1435 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (not isC0) { |
1436 | ✗ | std::cout << errmsg2 << " pc_C0 " << std::endl; | |
1437 | ✗ | error = true; | |
1438 | } | ||
1439 | // not C1 | ||
1440 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bool isC1 = pc_C0.is_continuous(1); |
1441 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (isC1) { |
1442 | ✗ | std::cout << errmsg3 << " pc_C0 " << std::endl; | |
1443 | ✗ | error = true; | |
1444 | } | ||
1445 | // C1 | ||
1446 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | isC1 = pc_C1.is_continuous(1); |
1447 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (not isC1) { |
1448 | ✗ | std::cout << errmsg3 << " pc_C1 " << std::endl; | |
1449 | ✗ | error = true; | |
1450 | } | ||
1451 | // not C2 | ||
1452 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bool isC2 = pc_C1.is_continuous(2); |
1453 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (isC2) { |
1454 | ✗ | std::cout << errmsg4 << " pc_C1 " << std::endl; | |
1455 | ✗ | error = true; | |
1456 | } | ||
1457 | // C2 | ||
1458 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | isC2 = pc_C2.is_continuous(2); |
1459 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (not isC2) { |
1460 | ✗ | std::cout << errmsg4 << " pc_C2 " << std::endl; | |
1461 | ✗ | error = true; | |
1462 | } | ||
1463 | // CONVERT PIECEWISE POLYNOMIAL CURVES TO BEZIER AND HERMITE | ||
1464 | std::string errmsg5( | ||
1465 | "in piecewise polynomial curve test, Error while checking piecewise " | ||
1466 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "curve conversion"); |
1467 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | piecewise_t pc_bezier = pc.convert_piecewise_curve_to_bezier<bezier_t>(); |
1468 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<piecewise_t, piecewise_t>(pc, pc_bezier, errmsg5, error); |
1469 | piecewise_t pc_hermite = | ||
1470 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pc.convert_piecewise_curve_to_cubic_hermite<cubic_hermite_spline_t>(); |
1471 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<piecewise_t, piecewise_t>(pc, pc_hermite, errmsg5, error); |
1472 | piecewise_t pc_polynomial_same = | ||
1473 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pc.convert_piecewise_curve_to_polynomial<polynomial_t>(); |
1474 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<piecewise_t, piecewise_t>(pc, pc_polynomial_same, errmsg5, |
1475 | error); | ||
1476 | // CONVERT PIECEWISE BEZIER TO POLYNOMIAL AND HERMITE | ||
1477 | |||
1478 | std::string errmsg6( | ||
1479 | "in piecewise bezier curve test, Error while checking piecewise curve " | ||
1480 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "conversion"); |
1481 | piecewise_t pc_bezier1 = | ||
1482 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pc_C0.convert_piecewise_curve_to_bezier<bezier_t>(); |
1483 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<piecewise_t, piecewise_t>(pc_C0, pc_bezier1, errmsg6, error); |
1484 | piecewise_t pc_hermite1 = | ||
1485 | pc_C0 | ||
1486 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | .convert_piecewise_curve_to_cubic_hermite<cubic_hermite_spline_t>(); |
1487 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<piecewise_t, piecewise_t>(pc_C0, pc_hermite1, errmsg6, error); |
1488 | piecewise_t pc_polynomial1 = | ||
1489 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pc_C0.convert_piecewise_curve_to_polynomial<polynomial_t>(); |
1490 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<piecewise_t, piecewise_t>(pc_C0, pc_polynomial1, errmsg6, |
1491 | error); | ||
1492 | |||
1493 | // compare compute_derivate and derivate results : | ||
1494 | |||
1495 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | curve_abc_t* pc_C2_derivate = pc_C2.compute_derivate_ptr(1); |
1496 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | curve_abc_t* pc_C2_derivate2 = pc_C2.compute_derivate_ptr(2); |
1497 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1 | if (pc_C2.min() != pc_C2_derivate->min()) { |
1498 | ✗ | error = true; | |
1499 | ✗ | std::cout << "min bounds for curve and it's derivate are not equals." | |
1500 | ✗ | << std::endl; | |
1501 | } | ||
1502 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1 | if (pc_C2.min() != pc_C2_derivate2->min()) { |
1503 | ✗ | error = true; | |
1504 | std::cout | ||
1505 | ✗ | << "min bounds for curve and it's second derivate are not equals." | |
1506 | ✗ | << std::endl; | |
1507 | } | ||
1508 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1 | if (pc_C2.max() != pc_C2_derivate->max()) { |
1509 | ✗ | error = true; | |
1510 | ✗ | std::cout << "max bounds for curve and it's derivate are not equals." | |
1511 | ✗ | << std::endl; | |
1512 | } | ||
1513 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1 | if (pc_C2.max() != pc_C2_derivate2->max()) { |
1514 | ✗ | error = true; | |
1515 | std::cout | ||
1516 | ✗ | << "max bounds for curve and it's second derivate are not equals." | |
1517 | ✗ | << std::endl; | |
1518 | } | ||
1519 | 1 | double t = 0.; | |
1520 |
2/2✓ Branch 1 taken 200 times.
✓ Branch 2 taken 1 times.
|
201 | while (t < pc_C2.max()) { |
1521 |
6/12✓ Branch 1 taken 200 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 200 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 200 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 200 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 200 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 200 times.
|
200 | if (!QuasiEqual(pc_C2.derivate(t, 1), (*pc_C2_derivate)(t))) { |
1522 | ✗ | error = true; | |
1523 | std::cout << "value not equal between derivate and compute_derivate " | ||
1524 | ✗ | "(order 1) at t = " | |
1525 | ✗ | << t << std::endl; | |
1526 | } | ||
1527 |
6/12✓ Branch 1 taken 200 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 200 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 200 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 200 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 200 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 200 times.
|
200 | if (!QuasiEqual(pc_C2.derivate(t, 2), (*pc_C2_derivate2)(t))) { |
1528 | ✗ | error = true; | |
1529 | std::cout << "value not equal between derivate and compute_derivate " | ||
1530 | ✗ | "(order 2) at t = " | |
1531 | ✗ | << t << std::endl; | |
1532 | } | ||
1533 | 200 | t += 0.01; | |
1534 | } | ||
1535 | |||
1536 | 1 | } catch (...) { | |
1537 | ✗ | error = true; | |
1538 | ✗ | std::cout << "Error in piecewiseCurveTest" << std::endl; | |
1539 | } | ||
1540 | 1 | } | |
1541 | |||
1542 | 1 | void curveAbcDimDynamicTest(bool& error) { | |
1543 | typedef curve_abc<double, double, true> curve_abc_test_t; | ||
1544 | typedef polynomial<double, double, true> polynomial_test_t; | ||
1545 | typedef exact_cubic<double, double, true> exact_cubic_test_t; | ||
1546 | typedef exact_cubic_test_t::spline_constraints spline_constraints_test_t; | ||
1547 | typedef bezier_curve<double, double, true> bezier_test_t; | ||
1548 | typedef cubic_hermite_spline<double, double, true> | ||
1549 | cubic_hermite_spline_test_t; | ||
1550 | curve_abc_test_t* pt_curve_abc; | ||
1551 | // POLYNOMIAL | ||
1552 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 1, 1); |
1553 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 2, 2); |
1554 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | t_pointX_t vec; |
1555 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(a); |
1556 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec.push_back(b); |
1557 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | polynomial_test_t pol(vec.begin(), vec.end(), 0, 1); |
1558 | try { | ||
1559 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pol(0); |
1560 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pol(1); |
1561 | ✗ | } catch (...) { | |
1562 | ✗ | error = false; | |
1563 | } | ||
1564 | // BEZIER | ||
1565 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bezier_test_t bc = bezier_from_curve<bezier_test_t>(pol); |
1566 | try { | ||
1567 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bc(0); |
1568 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bc(1); |
1569 | ✗ | } catch (...) { | |
1570 | ✗ | error = false; | |
1571 | } | ||
1572 | // CUBIC HERMITE | ||
1573 | cubic_hermite_spline_test_t chs = | ||
1574 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | hermite_from_curve<cubic_hermite_spline_test_t>(pol); |
1575 | try { | ||
1576 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | chs(0); |
1577 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | chs(1); |
1578 | ✗ | } catch (...) { | |
1579 | ✗ | error = false; | |
1580 | } | ||
1581 | // EXACT CUBIC : NOT SUPPORTED, problem to fix later | ||
1582 | 1 | ndcurves::T_Waypoint waypoints; | |
1583 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
|
7 | for (double i = 0; i <= 1; i = i + 0.2) { |
1584 |
4/8✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 6 times.
✗ Branch 11 not taken.
|
6 | waypoints.push_back(std::make_pair(i, point3_t(i, i, i))); |
1585 | } | ||
1586 | std::string errmsg( | ||
1587 | "Error in ExactCubicVelocityConstraintsTest (1); while checking that " | ||
1588 | "given wayPoints are crossed (expected / " | ||
1589 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "obtained)"); |
1590 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | spline_constraints_test_t constraints(3); |
1591 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.end_vel = point3_t(0, 0, 0); |
1592 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.init_vel = point3_t(0, 0, 0); |
1593 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.end_acc = point3_t(0, 0, 0); |
1594 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.init_acc = point3_t(0, 0, 0); |
1595 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | exact_cubic_test_t ec(waypoints.begin(), waypoints.end(), constraints); |
1596 | try { | ||
1597 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ec(0); |
1598 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ec(1); |
1599 | ✗ | } catch (...) { | |
1600 | ✗ | error = false; | |
1601 | } | ||
1602 | // Test with pointer to curve_abc type | ||
1603 | try { | ||
1604 | 1 | pt_curve_abc = &pol; | |
1605 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | (*pt_curve_abc)(0); |
1606 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | (*pt_curve_abc)(1); |
1607 | 1 | pt_curve_abc = &bc; | |
1608 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | (*pt_curve_abc)(0); |
1609 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | (*pt_curve_abc)(1); |
1610 | 1 | pt_curve_abc = &chs; | |
1611 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | (*pt_curve_abc)(0); |
1612 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | (*pt_curve_abc)(1); |
1613 | 1 | pt_curve_abc = &ec; | |
1614 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | (*pt_curve_abc)(0); |
1615 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | (*pt_curve_abc)(1); |
1616 | ✗ | } catch (...) { | |
1617 | ✗ | error = false; | |
1618 | } | ||
1619 | 1 | } | |
1620 | |||
1621 | 1 | void PiecewisePolynomialCurveFromDiscretePoints(bool& error) { | |
1622 | std::string errMsg( | ||
1623 | "PiecewisePolynomialCurveFromDiscretePoints, Error, value on curve is " | ||
1624 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "wrong : "); |
1625 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t p0(0., 0., 0.); |
1626 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t p1(1., 2., 3.); |
1627 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t p2(4., 4., 4.); |
1628 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t p3(10., 10., 10.); |
1629 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d0(1., 1., 1.); |
1630 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d1(2., 2., 2.); |
1631 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d2(3., 3., 3.); |
1632 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d3(5., 5., 5.); |
1633 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t dd0(1.5, 1.5, 1.5); |
1634 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t dd1(2.5, 2.5, 2.5); |
1635 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t dd2(3.5, 3.5, 3.5); |
1636 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t dd3(5.5, 5.5, 5.5); |
1637 | 1 | double t0 = 1.0; | |
1638 | 1 | double t1 = 1.5; | |
1639 | 1 | double t2 = 3.0; | |
1640 | 1 | double t3 = 10.0; | |
1641 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | t_pointX_t points; |
1642 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | points.push_back(p0); |
1643 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | points.push_back(p1); |
1644 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | points.push_back(p2); |
1645 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | points.push_back(p3); |
1646 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | t_pointX_t points_derivative; |
1647 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | points_derivative.push_back(d0); |
1648 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | points_derivative.push_back(d1); |
1649 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | points_derivative.push_back(d2); |
1650 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | points_derivative.push_back(d3); |
1651 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | t_pointX_t points_second_derivative; |
1652 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | points_second_derivative.push_back(dd0); |
1653 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | points_second_derivative.push_back(dd1); |
1654 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | points_second_derivative.push_back(dd2); |
1655 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | points_second_derivative.push_back(dd3); |
1656 | 1 | std::vector<double> time_points; | |
1657 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_points.push_back(t0); |
1658 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_points.push_back(t1); |
1659 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_points.push_back(t2); |
1660 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_points.push_back(t3); |
1661 | |||
1662 | // Piecewise polynomial curve C0 => Linear interpolation between points | ||
1663 | piecewise_t ppc_C0 = | ||
1664 | piecewise_t::convert_discrete_points_to_polynomial<polynomial_t>( | ||
1665 |
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 | points, time_points); |
1666 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (!ppc_C0.is_continuous(0)) { |
1667 | std::cout << "PiecewisePolynomialCurveFromDiscretePoints, Error, piecewise " | ||
1668 | ✗ | "curve is not C0" | |
1669 | ✗ | << std::endl; | |
1670 | ✗ | error = true; | |
1671 | } | ||
1672 |
2/2✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
|
5 | for (std::size_t i = 0; i < points.size(); i++) { |
1673 |
4/8✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 4 times.
✗ Branch 14 not taken.
|
4 | ComparePoints(points[i], ppc_C0(time_points[i]), errMsg, error); |
1674 | } | ||
1675 |
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 | point3_t pos_between_po_and_p1((p1[0] + p0[0]) / 2.0, (p1[1] + p0[1]) / 2.0, |
1676 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
2 | (p1[2] + p0[2]) / 2.0); |
1677 | 1 | double time_between_po_and_p1 = (t0 + t1) / 2.0; | |
1678 |
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.
|
1 | ComparePoints(pos_between_po_and_p1, ppc_C0(time_between_po_and_p1), errMsg, |
1679 | error); | ||
1680 | |||
1681 | // Piecewise polynomial curve C1 | ||
1682 | piecewise_t ppc_C1 = | ||
1683 | piecewise_t::convert_discrete_points_to_polynomial<polynomial_t>( | ||
1684 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
2 | points, points_derivative, time_points); |
1685 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (!ppc_C1.is_continuous(1)) { |
1686 | std::cout << "PiecewisePolynomialCurveFromDiscretePoints, Error, piecewise " | ||
1687 | ✗ | "curve is not C1" | |
1688 | ✗ | << std::endl; | |
1689 | ✗ | error = true; | |
1690 | } | ||
1691 |
2/2✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
|
5 | for (std::size_t i = 0; i < points.size(); i++) { |
1692 |
4/8✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 4 times.
✗ Branch 14 not taken.
|
4 | ComparePoints(points[i], ppc_C1(time_points[i]), errMsg, error); |
1693 |
4/8✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 4 times.
✗ Branch 14 not taken.
|
4 | ComparePoints(points_derivative[i], ppc_C1.derivate(time_points[i], 1), |
1694 | errMsg, error); | ||
1695 | } | ||
1696 | |||
1697 | // Piecewise polynomial curve C2 | ||
1698 | piecewise_t ppc_C2 = | ||
1699 | piecewise_t::convert_discrete_points_to_polynomial<polynomial_t>( | ||
1700 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
2 | points, points_derivative, points_second_derivative, time_points); |
1701 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (!ppc_C2.is_continuous(2)) { |
1702 | std::cout << "PiecewisePolynomialCurveFromDiscretePoints, Error, piecewise " | ||
1703 | ✗ | "curve is not C1" | |
1704 | ✗ | << std::endl; | |
1705 | ✗ | error = true; | |
1706 | } | ||
1707 |
2/2✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
|
5 | for (std::size_t i = 0; i < points.size(); i++) { |
1708 |
4/8✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 4 times.
✗ Branch 14 not taken.
|
4 | ComparePoints(points[i], ppc_C2(time_points[i]), errMsg, error); |
1709 |
4/8✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 4 times.
✗ Branch 14 not taken.
|
4 | ComparePoints(points_derivative[i], ppc_C2.derivate(time_points[i], 1), |
1710 | errMsg, error); | ||
1711 |
3/6✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
|
8 | ComparePoints(points_second_derivative[i], |
1712 |
1/2✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
|
8 | ppc_C2.derivate(time_points[i], 2), errMsg, error); |
1713 | } | ||
1714 | 1 | } | |
1715 | |||
1716 | 1 | void PiecewisePolynomialCurveFromFile(bool& error) { | |
1717 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | std::string filename_pos(TEST_DATA_PATH "discrete_points_pos.txt"); |
1718 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | std::string filename_vel(TEST_DATA_PATH "discrete_points_vel.txt"); |
1719 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | std::string filename_acc(TEST_DATA_PATH "discrete_points_acc.txt"); |
1720 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | std::string filename_error(TEST_DATA_PATH "discrete_points_error.txt"); |
1721 | |||
1722 | piecewise_t c_pos = piecewise_t::load_piecewise_from_text_file<polynomial_t>( | ||
1723 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | filename_pos, 0.01, 3); |
1724 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (c_pos.min() != 0.) { |
1725 | ✗ | std::cout << "PiecewisePolynomialCurveFromFile, Error, t_min should be 0" | |
1726 | ✗ | << std::endl; | |
1727 | ✗ | error = true; | |
1728 | } | ||
1729 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (c_pos.max() != 0.03) { |
1730 | ✗ | std::cout << "PiecewisePolynomialCurveFromFile, Error, t_max should be 0.03" | |
1731 | ✗ | << std::endl; | |
1732 | ✗ | error = true; | |
1733 | } | ||
1734 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t p0(3), p2(3); |
1735 |
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 | p0 << -0.003860389372941039, 0.0012353625242474164, 0.009005041639999767; |
1736 |
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 | p2 << -0.0028803627898293283, 0.0011918668401150736, 0.009005041639999767; |
1737 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
1 | if (!c_pos(0.).isApprox(p0)) { |
1738 | ✗ | std::cout << "PiecewisePolynomialCurveFromFile, Error, points do not match" | |
1739 | ✗ | << std::endl; | |
1740 | ✗ | error = true; | |
1741 | } | ||
1742 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
1 | if (!c_pos(0.02).isApprox(p2)) { |
1743 | ✗ | std::cout << "PiecewisePolynomialCurveFromFile, Error, points do not match" | |
1744 | ✗ | << std::endl; | |
1745 | ✗ | error = true; | |
1746 | } | ||
1747 | |||
1748 | piecewise_t c_vel = piecewise_t::load_piecewise_from_text_file<polynomial_t>( | ||
1749 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | filename_vel, 0.05, 3); |
1750 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (c_pos.min() != 0.) { |
1751 | ✗ | std::cout << "PiecewisePolynomialCurveFromFile, Error, t_min should be 0" | |
1752 | ✗ | << std::endl; | |
1753 | ✗ | error = true; | |
1754 | } | ||
1755 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | if (!QuasiEqual(c_vel.max(), 0.15)) { |
1756 | ✗ | std::cout << "PiecewisePolynomialCurveFromFile, Error, t_max should be 0.15" | |
1757 | ✗ | << std::endl; | |
1758 | ✗ | error = true; | |
1759 | } | ||
1760 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pointX_t p3(3); |
1761 |
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 | p3 << 0.2968141884672718, 0.0012916907964522569, 0.00951023474821927; |
1762 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
1 | if (!c_vel(0.).isApprox(p0)) { |
1763 | ✗ | std::cout << "PiecewisePolynomialCurveFromFile, Error, points do not match" | |
1764 | ✗ | << std::endl; | |
1765 | ✗ | error = true; | |
1766 | } | ||
1767 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
1 | if (!c_vel(0.15).isApprox(p3)) { |
1768 | ✗ | std::cout << "PiecewisePolynomialCurveFromFile, Error, points do not match" | |
1769 | ✗ | << std::endl; | |
1770 | ✗ | error = true; | |
1771 | } | ||
1772 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
1 | if (!c_vel.derivate(0., 1).isZero()) { |
1773 | std::cout << "PiecewisePolynomialCurveFromFile, Error, c_vel derivative at " | ||
1774 | ✗ | "0. should be null" | |
1775 | ✗ | << std::endl; | |
1776 | ✗ | error = true; | |
1777 | } | ||
1778 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
1 | if (!c_vel.derivate(0.1, 1).isZero()) { |
1779 | std::cout << "PiecewisePolynomialCurveFromFile, Error, c_vel derivative at " | ||
1780 | ✗ | "0.1 should be null" | |
1781 | ✗ | << std::endl; | |
1782 | ✗ | error = true; | |
1783 | } | ||
1784 | |||
1785 | piecewise_t c_acc = piecewise_t::load_piecewise_from_text_file<polynomial_t>( | ||
1786 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | filename_acc, 0.001, 3); |
1787 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (c_acc.min() != 0.) { |
1788 | ✗ | std::cout << "PiecewisePolynomialCurveFromFile, Error, t_min should be 0" | |
1789 | ✗ | << std::endl; | |
1790 | ✗ | error = true; | |
1791 | } | ||
1792 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | if (!QuasiEqual(c_acc.max(), 7.85)) { |
1793 | ✗ | std::cout << "PiecewisePolynomialCurveFromFile, Error, t_max should be 7.85" | |
1794 | ✗ | << std::endl; | |
1795 | ✗ | error = true; | |
1796 | } | ||
1797 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
1 | if (!c_acc(0.).isApprox(p0)) { |
1798 | ✗ | std::cout << "PiecewisePolynomialCurveFromFile, Error, points do not match" | |
1799 | ✗ | << std::endl; | |
1800 | ✗ | error = true; | |
1801 | } | ||
1802 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pointX_t p5200(3); |
1803 |
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 | p5200 << 0.30273356072723845, -0.07619420199174821, 0.010015348526727433; |
1804 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
1 | if (!c_acc(5.2).isApprox(p5200)) { |
1805 | ✗ | std::cout << "PiecewisePolynomialCurveFromFile, Error, points do not match" | |
1806 | ✗ | << std::endl; | |
1807 | ✗ | error = true; | |
1808 | } | ||
1809 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
1 | if (!c_acc.derivate(0., 1).isZero()) { |
1810 | std::cout << "PiecewisePolynomialCurveFromFile, Error, c_acc derivative at " | ||
1811 | ✗ | "0 should be null" | |
1812 | ✗ | << std::endl; | |
1813 | ✗ | error = true; | |
1814 | } | ||
1815 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
1 | if (!c_acc.derivate(0.5, 1).isZero()) { |
1816 | std::cout << "PiecewisePolynomialCurveFromFile, Error, c_acc derivative " | ||
1817 | ✗ | "should at 0.5 be null" | |
1818 | ✗ | << std::endl; | |
1819 | ✗ | error = true; | |
1820 | } | ||
1821 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
1 | if (!c_acc.derivate(0., 2).isZero()) { |
1822 | std::cout << "PiecewisePolynomialCurveFromFile, Error, c_acc second " | ||
1823 | ✗ | "derivative at 0 should be null" | |
1824 | ✗ | << std::endl; | |
1825 | ✗ | error = true; | |
1826 | } | ||
1827 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
1 | if (!c_acc.derivate(5., 2).isZero()) { |
1828 | std::cout << "PiecewisePolynomialCurveFromFile, Error, c_acc second " | ||
1829 | ✗ | "derivative at 5 should be null" | |
1830 | ✗ | << std::endl; | |
1831 | ✗ | error = true; | |
1832 | } | ||
1833 | |||
1834 | try { | ||
1835 | piecewise_t c_error = | ||
1836 | piecewise_t::load_piecewise_from_text_file<polynomial_t>(filename_acc, | ||
1837 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | 0.01, 4); |
1838 | std::cout << "PiecewisePolynomialCurveFromFile, Error, dimension do not " | ||
1839 | ✗ | "match, an error should be raised" | |
1840 | ✗ | << std::endl; | |
1841 | ✗ | error = true; | |
1842 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | } catch (std::invalid_argument& /*e*/) { |
1843 | 1 | } | |
1844 | try { | ||
1845 | piecewise_t c_error = | ||
1846 | piecewise_t::load_piecewise_from_text_file<polynomial_t>(filename_error, | ||
1847 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | 0.01, 3); |
1848 | std::cout << "PiecewisePolynomialCurveFromFile, Error, " | ||
1849 | ✗ | "discrete_points_error should not be parsed correctly" | |
1850 | ✗ | << std::endl; | |
1851 | ✗ | error = true; | |
1852 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | } catch (std::invalid_argument& /*e*/) { |
1853 | 1 | } | |
1854 | 1 | } | |
1855 | |||
1856 | 1 | void serializationCurvesTest(bool& error) { | |
1857 | try { | ||
1858 | std::string errMsg1( | ||
1859 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "in serializationCurveTest, Error While serializing Polynomial : "); |
1860 | std::string errMsg2( | ||
1861 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "in serializationCurveTest, Error While serializing Bezier : "); |
1862 | std::string errMsg3( | ||
1863 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "in serializationCurveTest, Error While serializing Cubic Hermite : "); |
1864 | std::string errMsg4( | ||
1865 | "in serializationCurveTest, Error While serializing Piecewise curves " | ||
1866 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | ": "); |
1867 | std::string errMsg5( | ||
1868 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "in serializationCurveTest, Error While serializing Exact cubic : "); |
1869 | std::string errMsg6( | ||
1870 | "in serializationCurveTest, Error While serializing using abstract " | ||
1871 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "pointers : "); |
1872 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 1, 1); // in [0,1[ |
1873 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 1, 1); // in [1,2[ |
1874 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 1, 1); // in [2,3] |
1875 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t res; |
1876 |
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 | t_pointX_t vec1, vec2, vec3; |
1877 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec1.push_back(a); // x=1, y=1, z=1 |
1878 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec2.push_back(b); // x=2, y=1, z=1 |
1879 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vec3.push_back(c); // x=3, y=1, z=1 |
1880 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | polynomial_t pol1(vec1.begin(), vec1.end(), 0, 1); |
1881 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | polynomial_t pol2(vec2.begin(), vec2.end(), 1, 2); |
1882 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | polynomial_t pol3(vec3.begin(), vec3.end(), 2, 3); |
1883 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | piecewise_t ppc; |
1884 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ppc.add_curve<polynomial_t>(pol1); |
1885 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ppc.add_curve<polynomial_t>(pol2); |
1886 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ppc.add_curve<polynomial_t>(pol3); |
1887 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | std::string fileName("fileTest.test"); |
1888 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | std::string fileName1("fileTest1.test"); |
1889 | // Simple curves | ||
1890 | // Test serialization on Polynomial | ||
1891 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pol1.saveAsText<polynomial_t>(fileName1); |
1892 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t pol_test; |
1893 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pol_test.loadFromText<polynomial_t>(fileName1); |
1894 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<polynomial_t, polynomial_t>(pol1, pol_test, errMsg1, error); |
1895 | // Test serialization on Bezier | ||
1896 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bezier_t bc = bezier_from_curve<bezier_t>(pol1); |
1897 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bc.saveAsText<bezier_t>(fileName); |
1898 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bezier_t bc_test; |
1899 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bc_test.loadFromText<bezier_t>(fileName); |
1900 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<polynomial_t, bezier_t>(pol1, bc_test, errMsg2, error); |
1901 | // Test serialization on Cubic Hermite | ||
1902 | cubic_hermite_spline_t chs = | ||
1903 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | hermite_from_curve<cubic_hermite_spline_t>(pol1); |
1904 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | chs.saveAsText<cubic_hermite_spline_t>(fileName); |
1905 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | cubic_hermite_spline_t chs_test; |
1906 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | chs_test.loadFromText<cubic_hermite_spline_t>(fileName); |
1907 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<polynomial_t, cubic_hermite_spline_t>(pol1, chs_test, errMsg3, |
1908 | error); | ||
1909 | // Piecewise curves | ||
1910 | // Test serialization on Piecewise Polynomial curve | ||
1911 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ppc.saveAsText<piecewise_t>(fileName); |
1912 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | piecewise_t ppc_test, ppc_test_binary; |
1913 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ppc_test.loadFromText<piecewise_t>(fileName); |
1914 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<piecewise_t, piecewise_t>(ppc, ppc_test, errMsg4, error); |
1915 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ppc.saveAsBinary<piecewise_t>(fileName); |
1916 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ppc_test_binary.loadFromBinary<piecewise_t>(fileName); |
1917 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<piecewise_t, piecewise_t>(ppc, ppc_test_binary, errMsg4, |
1918 | error); | ||
1919 | |||
1920 | // Test serialization on Piecewise Bezier curve | ||
1921 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | piecewise_t pbc = ppc.convert_piecewise_curve_to_bezier<bezier_t>(); |
1922 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pbc.saveAsText<piecewise_t>(fileName); |
1923 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | piecewise_t pbc_test; |
1924 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pbc_test.loadFromText<piecewise_t>(fileName); |
1925 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<piecewise_t, piecewise_t>(ppc, pbc_test, errMsg4, error); |
1926 | // Test serialization on Piecewise Cubic Hermite curve | ||
1927 | piecewise_t pchc = | ||
1928 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ppc.convert_piecewise_curve_to_cubic_hermite<cubic_hermite_spline_t>(); |
1929 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pchc.saveAsText<piecewise_t>(fileName); |
1930 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | piecewise_t pchc_test; |
1931 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pchc_test.loadFromText<piecewise_t>(fileName); |
1932 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<piecewise_t, piecewise_t>(ppc, pchc_test, errMsg4, error); |
1933 | // Test serialization on exact cubic | ||
1934 | 1 | ndcurves::T_Waypoint waypoints; | |
1935 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
|
7 | for (double i = 0; i <= 1; i = i + 0.2) { |
1936 |
4/8✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 6 times.
✗ Branch 11 not taken.
|
6 | waypoints.push_back(std::make_pair(i, point3_t(i, i, i))); |
1937 | } | ||
1938 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | spline_constraints_t constraints(3); |
1939 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.end_vel = point3_t(0.1, 0, 0); |
1940 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.init_vel = point3_t(0.2, 0, 0); |
1941 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.end_acc = point3_t(0.01, 0, 0); |
1942 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | constraints.init_acc = point3_t(0.01, 0, 0); |
1943 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | exact_cubic_t ec(waypoints.begin(), waypoints.end(), constraints); |
1944 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ec.saveAsText<exact_cubic_t>(fileName); |
1945 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | exact_cubic_t ec_test; |
1946 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ec_test.loadFromText<exact_cubic_t>(fileName); |
1947 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | CompareCurves<exact_cubic_t, exact_cubic_t>(ec, ec_test, errMsg5, error); |
1948 | // Test with pointer on abstract struct curve_abc | ||
1949 | // Polynomial | ||
1950 | curve_abc_t* pt_0; | ||
1951 | curve_abc_t* pt_1; | ||
1952 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pol_test = polynomial_t(); |
1953 | 1 | pt_0 = &pol1; | |
1954 | 1 | pt_1 = &pol_test; | |
1955 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | (*pt_0).saveAsText<polynomial_t>(fileName); |
1956 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | (*pt_1).loadFromText<polynomial_t>(fileName); |
1957 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | CompareCurves<polynomial_t, polynomial_t>( |
1958 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | pol1, (*dynamic_cast<polynomial_t*>(pt_1)), errMsg6, error); |
1959 | // Piecewise Polynomial | ||
1960 | 1 | pt_0 = NULL; | |
1961 | 1 | pt_1 = NULL; | |
1962 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | ppc_test = piecewise_t(); |
1963 | 1 | pt_0 = &ppc; | |
1964 | 1 | pt_1 = &ppc_test; | |
1965 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | (*pt_0).saveAsText<piecewise_t>(fileName); |
1966 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | (*pt_1).loadFromText<piecewise_t>(fileName); |
1967 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | CompareCurves<piecewise_t, piecewise_t>( |
1968 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | ppc, (*dynamic_cast<piecewise_t*>(pt_1)), errMsg6, error); |
1969 | 1 | } catch (...) { | |
1970 | ✗ | error = true; | |
1971 | ✗ | std::cout << "Error in serializationCurvesTest" << std::endl; | |
1972 | } | ||
1973 | 1 | } | |
1974 | |||
1975 | 1 | void polynomialFromBoundaryConditions(bool& error) { | |
1976 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t zeros = point3_t(0., 0., 0.); |
1977 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t p0 = point3_t(0., 1., 0.); |
1978 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t p1 = point3_t(1., 2., -3.); |
1979 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t dp0 = point3_t(-8., 4., 6.); |
1980 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t dp1 = point3_t(10., -10., 10.); |
1981 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t ddp0 = point3_t(-1., 7., 4.); |
1982 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t ddp1 = point3_t(12., -8., 2.5); |
1983 | 1 | double min = 0.5; | |
1984 | 1 | double max = 2.; | |
1985 | // C0 : order 1 | ||
1986 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t polC0 = polynomial_t(p0, p1, min, max); |
1987 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (polC0.min() != min) { |
1988 | ✗ | error = true; | |
1989 | std::cout | ||
1990 | ✗ | << "polynomialFromBoundaryConditions C0: min interval not respected." | |
1991 | ✗ | << std::endl; | |
1992 | } | ||
1993 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (polC0.max() != max) { |
1994 | ✗ | error = true; | |
1995 | std::cout | ||
1996 | ✗ | << "polynomialFromBoundaryConditions C0: max interval not respected." | |
1997 | ✗ | << std::endl; | |
1998 | } | ||
1999 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (polC0(min) != p0) { |
2000 | ✗ | error = true; | |
2001 | std::cout | ||
2002 | ✗ | << "polynomialFromBoundaryConditions C0: initial value not respected" | |
2003 | ✗ | << std::endl; | |
2004 | } | ||
2005 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (polC0(max) != p1) { |
2006 | ✗ | error = true; | |
2007 | std::cout | ||
2008 | ✗ | << "polynomialFromBoundaryConditions C0: final value not respected" | |
2009 | ✗ | << std::endl; | |
2010 | } | ||
2011 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (polC0.degree_ != 1) { |
2012 | ✗ | error = true; | |
2013 | ✗ | std::cout << "polynomialFromBoundaryConditions C0: curve is not degree 1 " | |
2014 | ✗ | << std::endl; | |
2015 | } | ||
2016 |
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 not taken.
✓ Branch 17 taken 1 times.
|
1 | if (polC0((max + min) / 2.) != (p0 * 0.5 + p1 * 0.5)) { |
2017 | ✗ | error = true; | |
2018 | std::cout << "polynomialFromBoundaryConditions C0: middle point doesn't " | ||
2019 | ✗ | "have the right value' " | |
2020 | ✗ | << std::endl; | |
2021 | } | ||
2022 | // C1 : order 3 | ||
2023 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t polC1 = polynomial_t(p0, dp0, p1, dp1, min, max); |
2024 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (polC1.min() != min) { |
2025 | ✗ | error = true; | |
2026 | std::cout | ||
2027 | ✗ | << "polynomialFromBoundaryConditions C1: min interval not respected." | |
2028 | ✗ | << std::endl; | |
2029 | } | ||
2030 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (polC1.max() != max) { |
2031 | ✗ | error = true; | |
2032 | std::cout | ||
2033 | ✗ | << "polynomialFromBoundaryConditions C1: max interval not respected." | |
2034 | ✗ | << std::endl; | |
2035 | } | ||
2036 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (polC1(min) != p0) { |
2037 | ✗ | error = true; | |
2038 | std::cout | ||
2039 | ✗ | << "polynomialFromBoundaryConditions C1: initial value not respected" | |
2040 | ✗ | << std::endl; | |
2041 | } | ||
2042 |
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 not taken.
✓ Branch 14 taken 1 times.
|
1 | if (!QuasiEqual(polC1(max), p1)) { |
2043 | ✗ | error = true; | |
2044 | std::cout | ||
2045 | ✗ | << "polynomialFromBoundaryConditions C1: final value not respected" | |
2046 | ✗ | << std::endl; | |
2047 | ✗ | std::cout << "p1 = " << p1.transpose() | |
2048 | ✗ | << " curve end = " << polC1(max).transpose() << std::endl; | |
2049 | } | ||
2050 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (polC1.derivate(min, 1) != dp0) { |
2051 | ✗ | error = true; | |
2052 | std::cout << "polynomialFromBoundaryConditions C1: initial derivative " | ||
2053 | ✗ | "value not respected" | |
2054 | ✗ | << std::endl; | |
2055 | } | ||
2056 |
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 not taken.
✓ Branch 14 taken 1 times.
|
1 | if (!QuasiEqual(polC1.derivate(max, 1), dp1)) { |
2057 | ✗ | error = true; | |
2058 | std::cout << "polynomialFromBoundaryConditions C1: final derivative value " | ||
2059 | ✗ | "not respected" | |
2060 | ✗ | << std::endl; | |
2061 | ✗ | std::cout << "dp1 = " << dp1.transpose() << " curve end derivative = " | |
2062 | ✗ | << polC1.derivate(max, 1).transpose() << std::endl; | |
2063 | } | ||
2064 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (polC1.degree_ != 3) { |
2065 | ✗ | error = true; | |
2066 | ✗ | std::cout << "polynomialFromBoundaryConditions C1: curve is not degree 3 " | |
2067 | ✗ | << std::endl; | |
2068 | } | ||
2069 | // C2 : order 5 | ||
2070 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t polC2 = polynomial_t(p0, dp0, ddp0, p1, dp1, ddp1, min, max); |
2071 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (polC2.min() != min) { |
2072 | ✗ | error = true; | |
2073 | std::cout | ||
2074 | ✗ | << "polynomialFromBoundaryConditions C2: min interval not respected." | |
2075 | ✗ | << std::endl; | |
2076 | } | ||
2077 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (polC2.max() != max) { |
2078 | ✗ | error = true; | |
2079 | std::cout | ||
2080 | ✗ | << "polynomialFromBoundaryConditions C2: max interval not respected." | |
2081 | ✗ | << std::endl; | |
2082 | } | ||
2083 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (polC2(min) != p0) { |
2084 | ✗ | error = true; | |
2085 | std::cout | ||
2086 | ✗ | << "polynomialFromBoundaryConditions C2: initial value not respected" | |
2087 | ✗ | << std::endl; | |
2088 | } | ||
2089 |
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 not taken.
✓ Branch 14 taken 1 times.
|
1 | if (!QuasiEqual(polC2(max), p1)) { |
2090 | ✗ | error = true; | |
2091 | std::cout | ||
2092 | ✗ | << "polynomialFromBoundaryConditions C2: final value not respected" | |
2093 | ✗ | << std::endl; | |
2094 | } | ||
2095 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (polC2.derivate(min, 1) != dp0) { |
2096 | ✗ | error = true; | |
2097 | std::cout << "polynomialFromBoundaryConditions C2: initial derivative " | ||
2098 | ✗ | "value not respected" | |
2099 | ✗ | << std::endl; | |
2100 | } | ||
2101 |
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 not taken.
✓ Branch 14 taken 1 times.
|
1 | if (!QuasiEqual(polC2.derivate(max, 1), dp1)) { |
2102 | ✗ | error = true; | |
2103 | std::cout << "polynomialFromBoundaryConditions C2: final derivative value " | ||
2104 | ✗ | "not respected" | |
2105 | ✗ | << std::endl; | |
2106 | } | ||
2107 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (polC2.derivate(min, 2) != ddp0) { |
2108 | ✗ | error = true; | |
2109 | std::cout << "polynomialFromBoundaryConditions C2: initial second " | ||
2110 | ✗ | "derivative value not respected" | |
2111 | ✗ | << std::endl; | |
2112 | } | ||
2113 |
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 not taken.
✓ Branch 14 taken 1 times.
|
1 | if (!QuasiEqual(polC2.derivate(max, 2), ddp1)) { |
2114 | ✗ | error = true; | |
2115 | std::cout << "polynomialFromBoundaryConditions C2: final second derivative " | ||
2116 | ✗ | "value not respected" | |
2117 | ✗ | << std::endl; | |
2118 | } | ||
2119 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (polC2.degree_ != 5) { |
2120 | ✗ | error = true; | |
2121 | ✗ | std::cout << "polynomialFromBoundaryConditions C2: curve is not degree 5 " | |
2122 | ✗ | << std::endl; | |
2123 | } | ||
2124 | // check if the exeptions are correctly raised : | ||
2125 | try { | ||
2126 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | polynomial_t polC0Err = polynomial_t(p0, p1, max, min); |
2127 | ✗ | error = true; | |
2128 | ✗ | std::cout << "Created a polynomial with tMin > tMax without error. " | |
2129 | ✗ | << std::endl; | |
2130 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | } catch (const invalid_argument& /*e*/) { |
2131 | 1 | } | |
2132 | try { | ||
2133 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | polynomial_t polC1Err = polynomial_t(p0, dp0, p1, dp1, max, min); |
2134 | ✗ | error = true; | |
2135 | ✗ | std::cout << "Created a polynomial with tMin > tMax without error. " | |
2136 | ✗ | << std::endl; | |
2137 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | } catch (const invalid_argument& /*e*/) { |
2138 | 1 | } | |
2139 | try { | ||
2140 | polynomial_t polC2Err = | ||
2141 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | polynomial_t(p0, dp0, ddp0, p1, dp1, ddp1, max, min); |
2142 | ✗ | error = true; | |
2143 | ✗ | std::cout << "Created a polynomial with tMin > tMax without error. " | |
2144 | ✗ | << std::endl; | |
2145 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | } catch (const invalid_argument& /*e*/) { |
2146 | 1 | } | |
2147 | 1 | } | |
2148 | |||
2149 | 1 | void so3LinearTest(bool& error) { | |
2150 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion_t q0(1, 0, 0, 0); |
2151 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion_t q1(0.7071, 0.7071, 0, 0); |
2152 | 1 | const double tMin = 0.; | |
2153 | 1 | const double tMax = 1.5; | |
2154 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SO3Linear_t so3Traj(q0, q1, tMin, tMax); |
2155 | |||
2156 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (so3Traj.min() != tMin) { |
2157 | ✗ | error = true; | |
2158 | ✗ | std::cout << "Min bound not respected" << std::endl; | |
2159 | } | ||
2160 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (so3Traj.max() != tMax) { |
2161 | ✗ | error = true; | |
2162 | ✗ | std::cout << "Max bound not respected" << std::endl; | |
2163 | } | ||
2164 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (!so3Traj.computeAsQuaternion(tMin).isApprox(q0)) { |
2165 | ✗ | error = true; | |
2166 | ✗ | std::cout << "evaluate at t=0 is not the init quaternion" << std::endl; | |
2167 | } | ||
2168 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
|
1 | if (so3Traj(tMin) != q0.toRotationMatrix()) { |
2169 | ✗ | error = true; | |
2170 | ✗ | std::cout << "evaluate at t=0 is not the init rotation" << std::endl; | |
2171 | } | ||
2172 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (!so3Traj.computeAsQuaternion(tMax).isApprox(q1)) { |
2173 | ✗ | error = true; | |
2174 | ✗ | std::cout << "evaluate at t=max is not the final quaternion" << std::endl; | |
2175 | } | ||
2176 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
|
1 | if (so3Traj(tMax) != q1.toRotationMatrix()) { |
2177 | ✗ | error = true; | |
2178 | ✗ | std::cout << "evaluate at t=max is not the final rotation" << std::endl; | |
2179 | } | ||
2180 | // check derivatives : | ||
2181 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
|
1 | if (so3Traj.derivate(tMin, 1) != so3Traj.derivate(1., 1)) { |
2182 | ✗ | error = true; | |
2183 | ✗ | std::cout << "first order derivative should be constant." << std::endl; | |
2184 | } | ||
2185 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
|
1 | if (so3Traj.derivate(tMin, 2) != point3_t::Zero(3)) { |
2186 | ✗ | error = true; | |
2187 | ✗ | std::cout << "second order derivative should be null" << std::endl; | |
2188 | } | ||
2189 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t angular_vel = so3Traj.derivate(tMin, 1); |
2190 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
|
1 | if (angular_vel[1] != 0. || angular_vel[2] != 0) { |
2191 | ✗ | error = true; | |
2192 | ✗ | std::cout << "Angular velocity around y and z axis should be null" | |
2193 | ✗ | << std::endl; | |
2194 | } | ||
2195 | |||
2196 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | constant3_t so3Derivate1 = so3Traj.compute_derivate(1); |
2197 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
|
1 | if (so3Derivate1(1.) != so3Traj.derivate(1., 1)) { |
2198 | ✗ | error = true; | |
2199 | ✗ | std::cout << "compute_derivate curve do not equal derivate call" | |
2200 | ✗ | << std::endl; | |
2201 | } | ||
2202 | |||
2203 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | constant3_t so3Derivate2 = so3Traj.compute_derivate(2); |
2204 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
|
1 | if (so3Derivate2(1.) != point3_t::Zero(3)) { |
2205 | ✗ | error = true; | |
2206 | ✗ | std::cout << "compute_derivate curve do not equal derivate call" | |
2207 | ✗ | << std::endl; | |
2208 | } | ||
2209 | |||
2210 | // check if errors are correctly raised : | ||
2211 | try { | ||
2212 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | so3Traj(-0.1); |
2213 | ✗ | error = true; | |
2214 | std::cout << "SO3Linear: calling () with t < tmin should raise an " | ||
2215 | ✗ | "invalid_argument error" | |
2216 | ✗ | << std::endl; | |
2217 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | } catch (std::invalid_argument& /*e*/) { |
2218 | 1 | } | |
2219 | try { | ||
2220 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | so3Traj(1.7); |
2221 | ✗ | error = true; | |
2222 | std::cout << "SO3Linear: calling () with t > tmin should raise an " | ||
2223 | ✗ | "invalid_argument error" | |
2224 | ✗ | << std::endl; | |
2225 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | } catch (std::invalid_argument& /*e*/) { |
2226 | 1 | } | |
2227 | try { | ||
2228 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | so3Traj.derivate(0, 0); |
2229 | ✗ | error = true; | |
2230 | std::cout << "SO3Linear: calling derivate with order = 0 should raise an " | ||
2231 | ✗ | "invalid_argument error" | |
2232 | ✗ | << std::endl; | |
2233 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | } catch (std::invalid_argument& /*e*/) { |
2234 | 1 | } | |
2235 | |||
2236 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | SO3Linear_t so3TrajMatrix(q0.toRotationMatrix(), q1.toRotationMatrix(), tMin, |
2237 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tMax); |
2238 | std::string errmsg( | ||
2239 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "SO3Linear built from quaternion or from matrix are not identical."); |
2240 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CompareCurves(so3Traj, so3TrajMatrix, errmsg, error, 1e-3); |
2241 | 1 | } | |
2242 | |||
2243 | 1 | void SO3serializationTest(bool& error) { | |
2244 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | std::string fileName("fileTest"); |
2245 | std::string errmsg( | ||
2246 | "SO3serializationTest : curve serialized is not equivalent to the " | ||
2247 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "original curve."); |
2248 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion_t q0(0.544, -0.002, -0.796, 0.265); |
2249 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion_t q1(0.7071, 0.7071, 0, 0); |
2250 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | q1.normalize(); |
2251 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | q0.normalize(); |
2252 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SO3Linear_t so3Traj(q0, q1, 0.5, 2.2); |
2253 | |||
2254 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | so3Traj.saveAsText<SO3Linear_t>(fileName + ".txt"); |
2255 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SO3Linear_t so3_from_txt; |
2256 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | so3_from_txt.loadFromText<SO3Linear_t>(fileName + ".txt"); |
2257 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | CompareCurves<SO3Linear_t, SO3Linear_t>( |
2258 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | so3Traj, so3_from_txt, errmsg + " For text serialization", error); |
2259 | |||
2260 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | so3Traj.saveAsXML<SO3Linear_t>(fileName + ".xml", "so3Curve"); |
2261 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SO3Linear_t so3_from_xml; |
2262 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | so3_from_xml.loadFromXML<SO3Linear_t>(fileName + ".xml", "so3Curve"); |
2263 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | CompareCurves<SO3Linear_t, SO3Linear_t>( |
2264 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | so3Traj, so3_from_xml, errmsg + " For XML serialization", error); |
2265 | |||
2266 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | so3Traj.saveAsBinary<SO3Linear_t>(fileName); |
2267 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SO3Linear_t so3_from_binary; |
2268 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | so3_from_binary.loadFromBinary<SO3Linear_t>(fileName); |
2269 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | CompareCurves<SO3Linear_t, SO3Linear_t>( |
2270 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | so3Traj, so3_from_binary, errmsg + " For binary serialization", error); |
2271 | 1 | } | |
2272 | |||
2273 | 1 | void se3CurveTest(bool& error) { | |
2274 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion_t q0(1, 0, 0, 0); |
2275 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion_t q1(0., 1., 0, 0); |
2276 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t p0 = point3_t(1., 1.5, -2.); |
2277 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t p1 = point3_t(3., 0, 1.); |
2278 | |||
2279 | 1 | double min = 0.5, max = 2.; | |
2280 | |||
2281 | // constructor from init/end position/rotation : automatically create a linear | ||
2282 | // interpolation for position and slerp for rotation | ||
2283 |
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 | SE3Curve_t cLinear(p0, p1, q0, q1, min, max); |
2284 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | transform_t transformInit = cLinear(min); |
2285 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | transform_t transformEnd = cLinear(max); |
2286 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | transform_t transformMid = cLinear((max + min) / 2.); |
2287 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (!transformInit.translation().isApprox(p0)) { |
2288 | ✗ | error = true; | |
2289 | ✗ | std::cout << "Init position of the curve is not correct." << std::endl; | |
2290 | } | ||
2291 |
4/8✓ 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.
|
1 | if (!transformInit.rotation().isApprox(q0.toRotationMatrix())) { |
2292 | ✗ | error = true; | |
2293 | ✗ | std::cout << "Init rotation of the curve is not correct." << std::endl; | |
2294 | } | ||
2295 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (!transformEnd.translation().isApprox(p1)) { |
2296 | ✗ | error = true; | |
2297 | ✗ | std::cout << "End position of the curve is not correct." << std::endl; | |
2298 | } | ||
2299 |
4/8✓ 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.
|
1 | if (!transformEnd.rotation().isApprox(q1.toRotationMatrix())) { |
2300 | ✗ | error = true; | |
2301 | ✗ | std::cout << "End rotation of the curve is not correct." << std::endl; | |
2302 | } | ||
2303 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion_t qMid(sqrt(2.) / 2., sqrt(2.) / 2., 0, 0); |
2304 |
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 | point3_t pMid = (p0 + p1) / 2.; |
2305 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (!transformMid.translation().isApprox(pMid)) { |
2306 | ✗ | error = true; | |
2307 | ✗ | std::cout << "Mid position of the curve is not correct." << std::endl; | |
2308 | } | ||
2309 |
4/8✓ 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.
|
1 | if (!transformMid.rotation().isApprox(qMid.toRotationMatrix())) { |
2310 | ✗ | error = true; | |
2311 | ✗ | std::cout << "Mid rotation of the curve is not correct." << std::endl; | |
2312 | } | ||
2313 | |||
2314 | // constructor with specific translation curve | ||
2315 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SE3Curve_t cBezier; |
2316 | { // inner scope to check what happen when translation_bezier is out of scope | ||
2317 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 2, 3); |
2318 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 3, 4); |
2319 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 4, 5); |
2320 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d(3, 6, 7); |
2321 | 1 | std::vector<point3_t> params; | |
2322 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(a); |
2323 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(b); |
2324 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(c); |
2325 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(d); |
2326 | std::shared_ptr<bezier3_t> translation_bezier = | ||
2327 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | std::make_shared<bezier3_t>(params.begin(), params.end(), min, max); |
2328 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | cBezier = SE3Curve_t(translation_bezier, q0.toRotationMatrix(), |
2329 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | q1.toRotationMatrix()); |
2330 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | p0 = (*translation_bezier)(min); |
2331 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | p1 = (*translation_bezier)(max); |
2332 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | pMid = (*translation_bezier)((max + min) / 2.); |
2333 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (cBezier.min() != min) { |
2334 | ✗ | error = true; | |
2335 | std::cout << "SE3 constructor from translation bezier do not respect the " | ||
2336 | ✗ | "min time interval" | |
2337 | ✗ | << std::endl; | |
2338 | } | ||
2339 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | if (cBezier.max() != max) { |
2340 | ✗ | error = true; | |
2341 | std::cout << "SE3 constructor from translation bezier do not respect the " | ||
2342 | ✗ | "max time interval" | |
2343 | ✗ | << std::endl; | |
2344 | } | ||
2345 | 1 | double t = min; | |
2346 |
2/2✓ Branch 0 taken 15 times.
✓ Branch 1 taken 1 times.
|
16 | while (t < max) { |
2347 |
5/10✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
✓ Branch 9 taken 15 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 15 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 15 times.
|
15 | if (!cBezier(t).translation().isApprox((*translation_bezier)(t))) { |
2348 | ✗ | error = true; | |
2349 | ✗ | std::cout << "SE3 translation is not equivalent to bezier for t = " << t | |
2350 | ✗ | << std::endl; | |
2351 | } | ||
2352 | 15 | t += 0.1; | |
2353 | } | ||
2354 | // check the derivatives for translation: | ||
2355 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
|
3 | for (size_t i = 1; i < 3; i++) { |
2356 | 2 | t = min; | |
2357 |
2/2✓ Branch 0 taken 30 times.
✓ Branch 1 taken 2 times.
|
32 | while (t < max) { |
2358 |
3/6✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 30 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 30 times.
✗ Branch 9 not taken.
|
60 | if (!cBezier.derivate(t, i).head<3>().isApprox( |
2359 |
2/4✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
|
60 | translation_bezier->derivate(t, i))) { |
2360 | ✗ | error = true; | |
2361 | std::cout | ||
2362 | ✗ | << "SE3 curve derivative is not equivalent to bezier for t = " | |
2363 | ✗ | << t << " and order = " << i << std::endl; | |
2364 | } | ||
2365 | 30 | t += 0.1; | |
2366 | } | ||
2367 | } | ||
2368 | 1 | } | |
2369 | // check the rotation | ||
2370 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | transformInit = cBezier(min); |
2371 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | transformEnd = cBezier(max); |
2372 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | transformMid = cBezier((max + min) / 2.); |
2373 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (!transformInit.translation().isApprox(p0)) { |
2374 | ✗ | error = true; | |
2375 | ✗ | std::cout << "Init position of the curve is not correct." << std::endl; | |
2376 | } | ||
2377 |
4/8✓ 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.
|
1 | if (!transformInit.rotation().isApprox(q0.toRotationMatrix())) { |
2378 | ✗ | error = true; | |
2379 | ✗ | std::cout << "Init rotation of the curve is not correct." << std::endl; | |
2380 | } | ||
2381 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (!transformEnd.translation().isApprox(p1)) { |
2382 | ✗ | error = true; | |
2383 | ✗ | std::cout << "End position of the curve is not correct." << std::endl; | |
2384 | } | ||
2385 |
4/8✓ 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.
|
1 | if (!transformEnd.rotation().isApprox(q1.toRotationMatrix())) { |
2386 | ✗ | error = true; | |
2387 | ✗ | std::cout << "End rotation of the curve is not correct." << std::endl; | |
2388 | } | ||
2389 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
1 | if (!transformMid.translation().isApprox(pMid)) { |
2390 | ✗ | error = true; | |
2391 | ✗ | std::cout << "Mid position of the curve is not correct." << std::endl; | |
2392 | } | ||
2393 |
4/8✓ 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.
|
1 | if (!transformMid.rotation().isApprox(qMid.toRotationMatrix())) { |
2394 | ✗ | error = true; | |
2395 | ✗ | std::cout << "Mid rotation of the curve is not correct." << std::endl; | |
2396 | } | ||
2397 | |||
2398 | // check derivatives for rotation: | ||
2399 |
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 | if (cBezier.derivate(min, 1).tail<3>() != |
2400 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
2 | cBezier.derivate(max, 1).tail<3>()) { |
2401 | ✗ | error = true; | |
2402 | std::cout | ||
2403 | ✗ | << "SE3 curve : first order derivative for rotation should be constant." | |
2404 | ✗ | << std::endl; | |
2405 | } | ||
2406 |
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 12 not taken.
✓ Branch 13 taken 1 times.
|
1 | if (cBezier.derivate(min, 2).tail<3>() != point3_t::Zero(3)) { |
2407 | ✗ | error = true; | |
2408 | std::cout | ||
2409 | ✗ | << "SE3 curve : second order derivative for rotation should be null" | |
2410 | ✗ | << std::endl; | |
2411 | } | ||
2412 | |||
2413 | // check accessor to translation curves : | ||
2414 | 1 | curve_translation_ptr_t translation = cBezier.translation_curve(); | |
2415 |
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 13 not taken.
✓ Branch 14 taken 1 times.
|
1 | if (translation->operator()(min) != cBezier(min).translation()) { |
2416 | ✗ | error = true; | |
2417 | ✗ | std::cout << "SE3 curve : translation curve not equal to se3.translation" | |
2418 | ✗ | << std::endl; | |
2419 | } | ||
2420 |
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 13 not taken.
✓ Branch 14 taken 1 times.
|
1 | if (translation->operator()(max) != cBezier(max).translation()) { |
2421 | ✗ | error = true; | |
2422 | ✗ | std::cout << "SE3 curve : translation curve not equal to se3.translation" | |
2423 | ✗ | << std::endl; | |
2424 | } | ||
2425 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | if (translation->operator()((max + min) / 2.) != |
2426 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
2 | cBezier((max + min) / 2.).translation()) { |
2427 | ✗ | error = true; | |
2428 | ✗ | std::cout << "SE3 curve : translation curve not equal to se3.translation" | |
2429 | ✗ | << std::endl; | |
2430 | } | ||
2431 | // check accessor to rotation curves : | ||
2432 | 1 | curve_rotation_ptr_t rotation = cBezier.rotation_curve(); | |
2433 |
5/10✓ 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 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
|
1 | if (!rotation->operator()(min).isApprox(cBezier(min).rotation())) { |
2434 | ✗ | error = true; | |
2435 | ✗ | std::cout << "SE3 curve : rotation curve not equal to se3.rotation" | |
2436 | ✗ | << std::endl; | |
2437 | } | ||
2438 |
5/10✓ 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 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
|
1 | if (!rotation->operator()(max).isApprox(cBezier(max).rotation())) { |
2439 | ✗ | error = true; | |
2440 | ✗ | std::cout << "SE3 curve : rotation curve not equal to se3.rotation" | |
2441 | ✗ | << std::endl; | |
2442 | } | ||
2443 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | if (!rotation->operator()((max + min) / 2.) |
2444 |
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 10 not taken.
✓ Branch 11 taken 1 times.
|
1 | .isApprox(cBezier((max + min) / 2.).rotation())) { |
2445 | ✗ | error = true; | |
2446 | ✗ | std::cout << "SE3 curve : rotation curve not equal to se3.rotation" | |
2447 | ✗ | << std::endl; | |
2448 | } | ||
2449 | |||
2450 | // check if errors are correctly raised | ||
2451 | try { | ||
2452 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | cBezier(0.1); |
2453 | ✗ | error = true; | |
2454 | std::cout << "SE3 curve: calling () with t < tmin should raise an " | ||
2455 | ✗ | "invalid_argument error" | |
2456 | ✗ | << std::endl; | |
2457 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | } catch (std::invalid_argument& /*e*/) { |
2458 | 1 | } | |
2459 | try { | ||
2460 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | cBezier(2.3); |
2461 | ✗ | error = true; | |
2462 | std::cout << "SE3 curve: calling () with t > tmin should raise an " | ||
2463 | ✗ | "invalid_argument error" | |
2464 | ✗ | << std::endl; | |
2465 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | } catch (std::invalid_argument& /*e*/) { |
2466 | 1 | } | |
2467 | try { | ||
2468 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | cBezier.derivate(0.6, 0); |
2469 | ✗ | error = true; | |
2470 | std::cout << "SE3 curve: calling derivate with order = 0 should raise an " | ||
2471 | ✗ | "invalid_argument error" | |
2472 | ✗ | << std::endl; | |
2473 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | } catch (std::invalid_argument& /*e*/) { |
2474 | 1 | } | |
2475 | 1 | } | |
2476 | |||
2477 | 1 | void Se3serializationTest(bool& error) { | |
2478 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | std::string fileName("fileTest"); |
2479 | std::string errmsg( | ||
2480 | "SE3serializationTest : curve serialized is not equivalent to the " | ||
2481 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | "original curve."); |
2482 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion_t q0(1, 0, 0, 0); |
2483 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion_t q1(0., 1., 0, 0); |
2484 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t p0 = point3_t(1., 1.5, -2.); |
2485 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t p1 = point3_t(3., 0, 1.); |
2486 | 1 | double min = 0.5, max = 2.; | |
2487 | // constructor from init/end position/rotation : automatically create a linear | ||
2488 | // interpolation for position and slerp for rotation | ||
2489 |
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 | SE3Curve_t cLinear(p0, p1, q0, q1, min, max); |
2490 | |||
2491 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | cLinear.saveAsText<SE3Curve_t>(fileName + ".txt"); |
2492 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SE3Curve_t se3_from_txt; |
2493 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | se3_from_txt.loadFromText<SE3Curve_t>(fileName + ".txt"); |
2494 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | CompareCurves<SE3Curve_t, SE3Curve_t>( |
2495 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | cLinear, se3_from_txt, errmsg + " For text serialization", error); |
2496 | |||
2497 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | cLinear.saveAsXML<SE3Curve_t>(fileName + ".xml", "se3Curve"); |
2498 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SE3Curve_t se3_from_xml; |
2499 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | se3_from_xml.loadFromXML<SE3Curve_t>(fileName + ".xml", "se3Curve"); |
2500 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | CompareCurves<SE3Curve_t, SE3Curve_t>( |
2501 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | cLinear, se3_from_xml, errmsg + " For XML serialization", error); |
2502 | |||
2503 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | cLinear.saveAsBinary<SE3Curve_t>(fileName); |
2504 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SE3Curve_t se3_from_binary; |
2505 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | se3_from_binary.loadFromBinary<SE3Curve_t>(fileName); |
2506 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | CompareCurves<SE3Curve_t, SE3Curve_t>( |
2507 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | cLinear, se3_from_binary, errmsg + " For binary serialization", error); |
2508 | |||
2509 | // constructor with specific translation curve | ||
2510 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SE3Curve_t cBezier; |
2511 | { // inner scope to check what happen when translation_bezier is out of scope | ||
2512 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion_t q0(0.544, -0.002, -0.796, 0.265); |
2513 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion_t q1(0.7071, 0.7071, 0, 0); |
2514 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | q1.normalize(); |
2515 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | q0.normalize(); |
2516 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 2, 3); |
2517 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 3, 4); |
2518 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 4, 5); |
2519 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d(3, 6, 7); |
2520 | 1 | std::vector<point3_t> params; | |
2521 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(a); |
2522 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(b); |
2523 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(c); |
2524 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params.push_back(d); |
2525 | std::shared_ptr<bezier3_t> translation_bezier = | ||
2526 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | std::make_shared<bezier3_t>(params.begin(), params.end(), min, max); |
2527 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | cBezier = SE3Curve_t(translation_bezier, q0, q1); |
2528 | 1 | } | |
2529 | |||
2530 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | cBezier.saveAsText<SE3Curve_t>(fileName + ".txt"); |
2531 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SE3Curve_t se3_from_txt_bezier; |
2532 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | se3_from_txt_bezier.loadFromText<SE3Curve_t>(fileName + ".txt"); |
2533 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | CompareCurves<SE3Curve_t, SE3Curve_t>( |
2534 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | cBezier, se3_from_txt_bezier, errmsg + " For text serialization", error); |
2535 | |||
2536 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | cBezier.saveAsXML<SE3Curve_t>(fileName + ".xml", "se3Curve"); |
2537 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SE3Curve_t se3_from_xml_bezier; |
2538 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | se3_from_xml_bezier.loadFromXML<SE3Curve_t>(fileName + ".xml", "se3Curve"); |
2539 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | CompareCurves<SE3Curve_t, SE3Curve_t>( |
2540 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | cBezier, se3_from_xml_bezier, errmsg + " For XML serialization", error); |
2541 | |||
2542 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | cBezier.saveAsBinary<SE3Curve_t>(fileName); |
2543 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SE3Curve_t se3_from_binary_bezier; |
2544 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | se3_from_binary_bezier.loadFromBinary<SE3Curve_t>(fileName); |
2545 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | CompareCurves<SE3Curve_t, SE3Curve_t>(cBezier, se3_from_binary_bezier, |
2546 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | errmsg + " For binary serialization", |
2547 | error); | ||
2548 | 1 | } | |
2549 | |||
2550 | /** | ||
2551 | * @brief BezierLinearProblemTests test the generation of linear / quadratic | ||
2552 | * problems with variable control points bezier curves | ||
2553 | * @param error | ||
2554 | */ | ||
2555 | |||
2556 | using namespace ndcurves::optimization; | ||
2557 | |||
2558 | 22 | var_pair_t setup_control_points( | |
2559 | const std::size_t degree, const constraint_flag flag, | ||
2560 | const point3_t& initPos = point3_t(), const point3_t& endPos = point3_t(), | ||
2561 | const constraint_linear& constraints = constraint_linear(3), | ||
2562 | const double totalTime = 1.) { | ||
2563 |
1/2✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
|
22 | problem_definition_t pDef(constraints); |
2564 |
1/2✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
|
22 | pDef.init_pos = initPos; |
2565 |
1/2✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
|
22 | pDef.end_pos = endPos; |
2566 | 22 | pDef.flag = flag; | |
2567 | 22 | pDef.totalTime = totalTime; | |
2568 | 22 | pDef.degree = degree; | |
2569 |
2/2✓ Branch 1 taken 19 times.
✓ Branch 2 taken 3 times.
|
22 | problem_data_t pData = setup_control_points<point3_t, double, true>(pDef); |
2570 | return std::make_pair( | ||
2571 | pData.variables_, | ||
2572 |
2/4✓ Branch 1 taken 19 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 19 times.
✗ Branch 5 not taken.
|
38 | std::make_pair(pData.startVariableIndex, pData.numVariables)); |
2573 | 22 | } | |
2574 | |||
2575 | enum vartype { variable, constant }; | ||
2576 | |||
2577 | 86 | bool isVar(const linear_variable_t& var) { | |
2578 | 86 | return !var.isZero() && | |
2579 |
4/8✓ Branch 0 taken 86 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 86 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 86 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 86 times.
✗ Branch 10 not taken.
|
172 | var.B() == linear_variable_t::matrix_x_t::Identity(3, 3) && |
2580 |
3/6✓ Branch 1 taken 86 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 86 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 86 times.
✗ Branch 8 not taken.
|
172 | var.c() == linear_variable_t::vector_x_t::Zero(3); |
2581 | } | ||
2582 | |||
2583 | 31 | bool isConstant(const linear_variable_t& var) { | |
2584 |
1/2✓ Branch 1 taken 31 times.
✗ Branch 2 not taken.
|
62 | return var.isZero() || |
2585 |
3/6✓ Branch 1 taken 31 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 31 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 31 times.
✗ Branch 8 not taken.
|
31 | (var.B() == linear_variable_t::matrix_x_t::Zero(3, 3) && |
2586 |
3/6✓ Branch 1 taken 31 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 31 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 31 times.
✗ Branch 8 not taken.
|
62 | var.c() != linear_variable_t::vector_x_t::Zero(3)); |
2587 | } | ||
2588 | |||
2589 | /*bool isMixed(const linear_variable_t& var) | ||
2590 | { | ||
2591 | return var.A_ != linear_variable_t::matrix_t::Zero() && | ||
2592 | var.b_ != linear_variable_t::point_t::Zero(); | ||
2593 | }*/ | ||
2594 | |||
2595 | 117 | bool checkValue(const linear_variable_t& var, const vartype vart) { | |
2596 |
2/2✓ Branch 0 taken 31 times.
✓ Branch 1 taken 86 times.
|
117 | if (vart == constant) |
2597 | 31 | return isConstant(var); | |
2598 | else | ||
2599 | 86 | return isVar(var); | |
2600 | } | ||
2601 | |||
2602 | 19 | void checksequence(const T_linear_variable_t& vars, vartype* expected, | |
2603 | const std::string testname, bool& error) { | ||
2604 | 19 | int i = 0; | |
2605 |
2/2✓ Branch 3 taken 117 times.
✓ Branch 4 taken 19 times.
|
136 | for (CIT_linear_variable_t cit = vars.begin(); cit != vars.end(); |
2606 | 117 | ++cit, ++i) { | |
2607 |
2/4✓ Branch 2 taken 117 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 117 times.
|
117 | if (!checkValue(*cit, expected[i])) { |
2608 | std::cout << "in test: " << testname | ||
2609 | ✗ | << ": wrong type for variable at position " << i << std::endl; | |
2610 | ✗ | error = true; | |
2611 | } | ||
2612 | } | ||
2613 | 19 | } | |
2614 | |||
2615 | 19 | void checkNumVar(const T_linear_variable_t& vars, const std::size_t expected, | |
2616 | const std::string testname, bool& error) { | ||
2617 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 19 times.
|
19 | if (vars.size() != expected) { |
2618 | ✗ | error = true; | |
2619 | ✗ | std::cout << "incorrect number of variables in " << testname << "(" | |
2620 | ✗ | << expected << "," << vars.size() << ")" << std::endl; | |
2621 | } | ||
2622 | 19 | } | |
2623 | |||
2624 | 18 | void checkPair(const pair_size_t pair, const std::size_t start_index, | |
2625 | const std::size_t num_vars, const std::string testname, | ||
2626 | bool& error) { | ||
2627 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 18 times.
|
18 | if (pair.first != start_index) { |
2628 | ✗ | error = true; | |
2629 | std::cout << "incorrect starting index for variablesin " | ||
2630 | |||
2631 | ✗ | << testname << "(" << start_index << "," << pair.first << ")" | |
2632 | ✗ | << std::endl; | |
2633 | } | ||
2634 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 18 times.
|
18 | if (pair.second != num_vars) { |
2635 | ✗ | error = true; | |
2636 | std::cout << "incorrect number of identified variablesin " << testname | ||
2637 | ✗ | << "(" << num_vars << "," << pair.second << ")" << std::endl; | |
2638 | } | ||
2639 | 18 | } | |
2640 | |||
2641 | 1 | void BezierLinearProblemsetup_control_pointsNoConstraint(bool& error) { | |
2642 | 1 | constraint_flag flag = optimization::NONE; | |
2643 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
1 | var_pair_t res_no_constraints = setup_control_points(5, flag); |
2644 | 1 | T_linear_variable_t& vars = res_no_constraints.first; | |
2645 | 1 | vartype exptecdvars[] = {variable, variable, variable, | |
2646 | variable, variable, variable}; | ||
2647 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "setup_control_pointsNoConstraint", error); |
2648 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvars, "setup_control_pointsNoConstraint", error); |
2649 | 1 | } | |
2650 | |||
2651 | 3 | constraint_linear makeConstraint() { | |
2652 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | point3_t init_pos = point3_t(1., 1., 1.); |
2653 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | constraint_linear cl(3); |
2654 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | init_pos *= 2; |
2655 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | cl.init_vel = init_pos; |
2656 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | init_pos *= 2; |
2657 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | cl.init_acc = init_pos; |
2658 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | init_pos *= 2; |
2659 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | cl.end_acc = init_pos; |
2660 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | init_pos *= 2; |
2661 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | cl.end_vel = init_pos; |
2662 | 6 | return cl; | |
2663 | } | ||
2664 | |||
2665 | 1 | void BezierLinearProblemsetup_control_pointsVarCombinatorialInit(bool& error) { | |
2666 | 1 | constraint_flag flag = optimization::INIT_POS; | |
2667 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t init_pos = point3_t(1., 1., 1.); |
2668 |
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 | var_pair_t res = setup_control_points(5, flag, init_pos); |
2669 | 1 | T_linear_variable_t& vars = res.first; | |
2670 | 1 | vartype exptecdvars[] = {constant, variable, variable, | |
2671 | variable, variable, variable}; | ||
2672 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialInit", error); |
2673 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvars, "VarCombinatorialInit", error); |
2674 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 1, 5, "VarCombinatorialInit", error); |
2675 | |||
2676 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | constraint_linear constraints = makeConstraint(); |
2677 | 1 | flag = INIT_POS | INIT_VEL; | |
2678 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = setup_control_points(5, flag, init_pos, point3_t(), constraints); |
2679 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2680 | 1 | vartype exptecdvar1[] = {constant, constant, variable, | |
2681 | variable, variable, variable}; | ||
2682 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialInit", error); |
2683 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar1, "VarCombinatorialInit", error); |
2684 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 2, 4, "VarCombinatorialInit", error); |
2685 | |||
2686 | 1 | flag = INIT_POS | INIT_VEL | INIT_ACC; | |
2687 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = setup_control_points(5, flag, init_pos, point3_t(), constraints); |
2688 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2689 | 1 | vartype exptecdvar2[] = {constant, constant, constant, | |
2690 | variable, variable, variable}; | ||
2691 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialInit", error); |
2692 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar2, "VarCombinatorialInit", error); |
2693 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 3, 3, "VarCombinatorialInit", error); |
2694 | |||
2695 | 1 | flag = INIT_VEL; | |
2696 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = setup_control_points(5, flag, init_pos, point3_t(), constraints); |
2697 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2698 | 1 | vartype exptecdvar3[] = {variable, variable, variable, | |
2699 | variable, variable, variable}; | ||
2700 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialInit", error); |
2701 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar3, "VarCombinatorialInit", error); |
2702 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 0, 6, "VarCombinatorialInit", error); |
2703 | |||
2704 | 1 | flag = INIT_ACC; | |
2705 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = setup_control_points(5, flag, init_pos, point3_t(), constraints); |
2706 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2707 | 1 | vartype exptecdvar4[] = {variable, variable, variable, | |
2708 | variable, variable, variable}; | ||
2709 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialInit", error); |
2710 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar4, "VarCombinatorialInit", error); |
2711 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 0, 6, "VarCombinatorialInit", error); |
2712 | |||
2713 | 1 | flag = INIT_ACC | INIT_VEL; | |
2714 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | res = setup_control_points(5, flag, init_pos, point3_t(), constraints); |
2715 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2716 | 1 | vartype exptecdvar5[] = {variable, variable, variable, | |
2717 | variable, variable, variable}; | ||
2718 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialInit", error); |
2719 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar5, "VarCombinatorialInit", error); |
2720 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 0, 6, "VarCombinatorialInit", error); |
2721 | |||
2722 | 1 | bool err = true; | |
2723 | try { | ||
2724 | 1 | flag = INIT_POS | INIT_VEL; | |
2725 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1 | res = setup_control_points(1, flag, init_pos, point3_t(), constraints); |
2726 | 1 | } catch (...) { | |
2727 | 1 | err = false; | |
2728 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | } |
2729 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (err) { |
2730 | ✗ | error = true; | |
2731 | std::cout << "exception should be raised when degree of bezier curve is " | ||
2732 | ✗ | "not high enough to handle constraints " | |
2733 | ✗ | << std::endl; | |
2734 | } | ||
2735 | 1 | } | |
2736 | |||
2737 | 1 | void BezierLinearProblemsetup_control_pointsVarCombinatorialEnd(bool& error) { | |
2738 | 1 | constraint_flag flag = optimization::END_POS; | |
2739 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t init_pos = point3_t(1., 1., 1.); |
2740 |
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 | var_pair_t res = setup_control_points(5, flag, init_pos); |
2741 | 1 | T_linear_variable_t& vars = res.first; | |
2742 | 1 | vartype exptecdvars[] = {variable, variable, variable, | |
2743 | variable, variable, constant}; | ||
2744 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialEnd", error); |
2745 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvars, "VarCombinatorialEnd", error); |
2746 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 0, 5, "VarCombinatorialEnd", error); |
2747 | |||
2748 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | constraint_linear constraints = makeConstraint(); |
2749 | 1 | flag = END_POS | END_VEL; | |
2750 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | res = setup_control_points(5, flag, init_pos, init_pos, constraints); |
2751 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2752 | 1 | vartype exptecdvar1[] = {variable, variable, variable, | |
2753 | variable, constant, constant}; | ||
2754 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialEnd", error); |
2755 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar1, "VarCombinatorialEnd", error); |
2756 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 0, 4, "VarCombinatorialEnd", error); |
2757 | |||
2758 | 1 | flag = END_POS | END_VEL | END_ACC; | |
2759 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | res = setup_control_points(5, flag, init_pos, init_pos, constraints); |
2760 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2761 | 1 | vartype exptecdvar2[] = {variable, variable, variable, | |
2762 | constant, constant, constant}; | ||
2763 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialEnd", error); |
2764 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar2, "VarCombinatorialEnd", error); |
2765 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 0, 3, "VarCombinatorialEnd", error); |
2766 | |||
2767 | 1 | flag = END_VEL; | |
2768 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | res = setup_control_points(5, flag, init_pos, init_pos, constraints); |
2769 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2770 | 1 | vartype exptecdvar3[] = {variable, variable, variable, | |
2771 | variable, variable, variable}; | ||
2772 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialEnd", error); |
2773 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar3, "VarCombinatorialEnd", error); |
2774 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 0, 6, "VarCombinatorialEnd", error); |
2775 | |||
2776 | 1 | flag = END_ACC; | |
2777 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | res = setup_control_points(5, flag, init_pos, init_pos, constraints); |
2778 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2779 | 1 | vartype exptecdvar4[] = {variable, variable, variable, | |
2780 | variable, variable, variable}; | ||
2781 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialEnd", error); |
2782 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar4, "VarCombinatorialEnd", error); |
2783 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 0, 6, "VarCombinatorialEnd", error); |
2784 | |||
2785 | 1 | flag = END_ACC | END_VEL; | |
2786 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | res = setup_control_points(5, flag, init_pos, init_pos, constraints); |
2787 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2788 | 1 | vartype exptecdvar5[] = {variable, variable, variable, | |
2789 | variable, variable, variable}; | ||
2790 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialEnd", error); |
2791 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar5, "VarCombinatorialEnd", error); |
2792 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 0, 6, "VarCombinatorialEnd", error); |
2793 | |||
2794 | 1 | bool err = true; | |
2795 | try { | ||
2796 | 1 | flag = END_ACC | END_VEL; | |
2797 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1 | res = setup_control_points(1, flag, init_pos, point3_t(), constraints); |
2798 | 1 | } catch (...) { | |
2799 | 1 | err = false; | |
2800 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | } |
2801 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (err) { |
2802 | ✗ | error = true; | |
2803 | std::cout << "exception should be raised when degree of bezier curve is " | ||
2804 | ✗ | "not high enough to handle constraints " | |
2805 | ✗ | << std::endl; | |
2806 | } | ||
2807 | 1 | } | |
2808 | |||
2809 | 1 | void BezierLinearProblemsetup_control_pointsVarCombinatorialMix(bool& error) { | |
2810 | 1 | constraint_flag flag = END_POS | INIT_POS; | |
2811 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t init_pos = point3_t(1., 1., 1.); |
2812 |
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 | var_pair_t res = setup_control_points(5, flag, init_pos); |
2813 | 1 | T_linear_variable_t& vars = res.first; | |
2814 | 1 | vartype exptecdvars[] = {constant, variable, variable, | |
2815 | variable, variable, constant}; | ||
2816 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialMix", error); |
2817 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvars, "VarCombinatorialMix", error); |
2818 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 1, 4, "VarCombinatorialMix", error); |
2819 | |||
2820 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | constraint_linear constraints = makeConstraint(); |
2821 | 1 | flag = END_POS | END_VEL | INIT_VEL | INIT_POS; | |
2822 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | res = setup_control_points(5, flag, init_pos, init_pos, constraints); |
2823 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2824 | 1 | vartype exptecdvar1[] = {constant, constant, variable, | |
2825 | variable, constant, constant}; | ||
2826 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialMix", error); |
2827 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar1, "VarCombinatorialMix", error); |
2828 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 2, 2, "VarCombinatorialMix", error); |
2829 | |||
2830 | 1 | flag = END_POS | END_VEL | END_ACC | INIT_VEL | INIT_POS; | |
2831 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | res = setup_control_points(5, flag, init_pos, init_pos, constraints); |
2832 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2833 | 1 | vartype exptecdvar2[] = {constant, constant, variable, | |
2834 | constant, constant, constant}; | ||
2835 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialMix", error); |
2836 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar2, "VarCombinatorialMix", error); |
2837 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 2, 1, "VarCombinatorialMix", error); |
2838 | |||
2839 | 1 | flag = ALL; | |
2840 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | res = setup_control_points(8, flag, init_pos, init_pos, constraints); |
2841 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2842 | 1 | vartype exptecdvar3[] = {constant, constant, constant, constant, variable, | |
2843 | constant, constant, constant, constant}; | ||
2844 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 9, "VarCombinatorialMix", error); |
2845 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar3, "VarCombinatorialMix", error); |
2846 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 4, 1, "VarCombinatorialMix", error); |
2847 | |||
2848 | 1 | flag = END_VEL | END_ACC | INIT_VEL; | |
2849 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | res = setup_control_points(5, flag, init_pos, init_pos, constraints); |
2850 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2851 | 1 | vartype exptecdvar4[] = {variable, variable, variable, | |
2852 | variable, variable, variable}; | ||
2853 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialMix", error); |
2854 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar4, "VarCombinatorialMix", error); |
2855 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 0, 6, "VarCombinatorialMix", error); |
2856 | |||
2857 | 1 | flag = END_VEL | INIT_VEL; | |
2858 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | res = setup_control_points(5, flag, init_pos, init_pos, constraints); |
2859 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vars = res.first; |
2860 | 1 | vartype exptecdvar5[] = {variable, variable, variable, | |
2861 | variable, variable, variable}; | ||
2862 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkNumVar(vars, 6, "VarCombinatorialMix", error); |
2863 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checksequence(vars, exptecdvar5, "VarCombinatorialMix", error); |
2864 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | checkPair(res.second, 0, 6, "VarCombinatorialMix", error); |
2865 | |||
2866 | 1 | bool err = true; | |
2867 | try { | ||
2868 | 1 | flag = ALL; | |
2869 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | res = setup_control_points(5, flag, init_pos, init_pos, constraints); |
2870 | 1 | } catch (...) { | |
2871 | 1 | err = false; | |
2872 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | } |
2873 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (err) { |
2874 | ✗ | error = true; | |
2875 | std::cout << "exception should be raised when degree of bezier curve is " | ||
2876 | ✗ | "not high enough to handle constraints " | |
2877 | ✗ | << std::endl; | |
2878 | } | ||
2879 | 1 | } | |
2880 | |||
2881 | ✗ | void BezierLinearProblemInitInequalities(bool& error) { | |
2882 | ✗ | constraint_flag flag = INIT_POS | END_POS; | |
2883 | ✗ | point3_t init_pos = point3_t(1., 1., 1.); | |
2884 | ✗ | var_pair_t res = setup_control_points(5, flag, init_pos); | |
2885 | ✗ | T_linear_variable_t& vars = res.first; | |
2886 | ✗ | vartype exptecdvars[] = {constant, variable, variable, | |
2887 | variable, variable, constant}; | ||
2888 | ✗ | checkNumVar(vars, 6, "VarCombinatorialMix", error); | |
2889 | ✗ | checksequence(vars, exptecdvars, "VarCombinatorialMix", error); | |
2890 | ✗ | checkPair(res.second, 1, 4, "VarCombinatorialMix", error); | |
2891 | |||
2892 | ✗ | constraint_linear constraints = makeConstraint(); | |
2893 | ✗ | flag = END_POS | END_VEL | INIT_VEL | INIT_POS; | |
2894 | ✗ | res = setup_control_points(5, flag, init_pos, init_pos, constraints); | |
2895 | ✗ | vars = res.first; | |
2896 | ✗ | vartype exptecdvar1[] = {constant, constant, variable, | |
2897 | variable, constant, constant}; | ||
2898 | ✗ | checkNumVar(vars, 6, "VarCombinatorialMix", error); | |
2899 | ✗ | checksequence(vars, exptecdvar1, "VarCombinatorialMix", error); | |
2900 | ✗ | checkPair(res.second, 2, 2, "VarCombinatorialMix", error); | |
2901 | |||
2902 | ✗ | flag = END_POS | END_VEL | END_ACC | INIT_VEL | INIT_POS; | |
2903 | ✗ | res = setup_control_points(5, flag, init_pos, init_pos, constraints); | |
2904 | ✗ | vars = res.first; | |
2905 | ✗ | vartype exptecdvar2[] = {constant, constant, variable, | |
2906 | constant, constant, constant}; | ||
2907 | ✗ | checkNumVar(vars, 6, "VarCombinatorialMix", error); | |
2908 | ✗ | checksequence(vars, exptecdvar2, "VarCombinatorialMix", error); | |
2909 | ✗ | checkPair(res.second, 2, 1, "VarCombinatorialMix", error); | |
2910 | |||
2911 | ✗ | flag = ALL; | |
2912 | ✗ | res = setup_control_points(6, flag, init_pos, init_pos, constraints); | |
2913 | ✗ | vars = res.first; | |
2914 | ✗ | vartype exptecdvar3[] = {constant, constant, constant, variable, | |
2915 | constant, constant, constant}; | ||
2916 | ✗ | checkNumVar(vars, 7, "VarCombinatorialMix", error); | |
2917 | ✗ | checksequence(vars, exptecdvar3, "VarCombinatorialMix", error); | |
2918 | ✗ | checkPair(res.second, 3, 1, "VarCombinatorialMix", error); | |
2919 | |||
2920 | ✗ | flag = END_VEL | END_ACC | INIT_VEL; | |
2921 | ✗ | res = setup_control_points(5, flag, init_pos, init_pos, constraints); | |
2922 | ✗ | vars = res.first; | |
2923 | ✗ | vartype exptecdvar4[] = {variable, variable, variable, | |
2924 | variable, variable, variable}; | ||
2925 | ✗ | checkNumVar(vars, 6, "VarCombinatorialMix", error); | |
2926 | ✗ | checksequence(vars, exptecdvar4, "VarCombinatorialMix", error); | |
2927 | ✗ | checkPair(res.second, 0, 6, "VarCombinatorialMix", error); | |
2928 | |||
2929 | ✗ | flag = END_VEL | INIT_VEL; | |
2930 | ✗ | res = setup_control_points(5, flag, init_pos, init_pos, constraints); | |
2931 | ✗ | vars = res.first; | |
2932 | ✗ | vartype exptecdvar5[] = {variable, variable, variable, | |
2933 | variable, variable, variable}; | ||
2934 | ✗ | checkNumVar(vars, 6, "VarCombinatorialMix", error); | |
2935 | ✗ | checksequence(vars, exptecdvar5, "VarCombinatorialMix", error); | |
2936 | ✗ | checkPair(res.second, 0, 6, "VarCombinatorialMix", error); | |
2937 | |||
2938 | ✗ | bool err = true; | |
2939 | try { | ||
2940 | ✗ | flag = ALL; | |
2941 | ✗ | res = setup_control_points(5, flag, init_pos, init_pos, constraints); | |
2942 | ✗ | } catch (...) { | |
2943 | ✗ | err = false; | |
2944 | } | ||
2945 | ✗ | if (err) { | |
2946 | ✗ | error = true; | |
2947 | std::cout << "exception should be raised when degree of bezier curve is " | ||
2948 | ✗ | "not high enough to handle constraints " | |
2949 | ✗ | << std::endl; | |
2950 | } | ||
2951 | } | ||
2952 | |||
2953 | 1 | void BezierLinearProblemsetupLoadProblem(bool& /*error*/) { | |
2954 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | problem_definition_t pDef = loadproblem(TEST_DATA_PATH "test.pb"); |
2955 | // problem_data_t pData = setup_control_points<point_t, 3, double>(pDef); | ||
2956 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | generate_problem<point3_t, double, true>(pDef, VELOCITY); |
2957 | // initInequalityMatrix<point_t,3,double>(pDef,pData,prob); | ||
2958 | 1 | } | |
2959 | |||
2960 | 1 | void testOperatorEqual(bool& error) { | |
2961 | // test with a C2 polynomial : | ||
2962 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t zeros = point3_t(0., 0., 0.); |
2963 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t p0 = point3_t(0., 1., 0.); |
2964 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t p1 = point3_t(1., 2., -3.); |
2965 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t dp0 = point3_t(-8., 4., 6.); |
2966 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t dp1 = point3_t(10., -10., 10.); |
2967 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t ddp0 = point3_t(-1., 7., 4.); |
2968 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | pointX_t ddp1 = point3_t(12., -8., 2.5); |
2969 | 1 | double min = 0.5; | |
2970 | 1 | double max = 2.; | |
2971 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t polC2_1 = polynomial_t(p0, dp0, ddp0, p1, dp1, ddp1, min, max); |
2972 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t polC2_2 = polynomial_t(p0, dp0, ddp0, p1, dp1, ddp1, min, max); |
2973 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t polC2_3(polC2_1); |
2974 | // std::cout<<"Should call polynomial method : "<<std::endl; | ||
2975 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (polC2_1 != polC2_2) { |
2976 | ✗ | std::cout << "polC2_1 and polC2_2 should be equals" << std::endl; | |
2977 | ✗ | error = true; | |
2978 | } | ||
2979 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (polC2_1 != polC2_3) { |
2980 | ✗ | std::cout << "polC2_1 and polC2_3 should be equals" << std::endl; | |
2981 | ✗ | error = true; | |
2982 | } | ||
2983 | |||
2984 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t polC2_4 = polynomial_t(p1, dp0, ddp0, p1, dp1, ddp0, min, max); |
2985 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (polC2_1 == polC2_4) { |
2986 | ✗ | std::cout << "polC2_1 and polC2_4 should not be equals" << std::endl; | |
2987 | ✗ | error = true; | |
2988 | } | ||
2989 | |||
2990 | // test with bezier | ||
2991 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a(1, 2, 3); |
2992 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b(2, 3, 4); |
2993 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c(3, 4, 5); |
2994 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d(3, 6, 7); |
2995 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t e(3, 61, 7); |
2996 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t f(3, 56, 7); |
2997 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t g(3, 36, 7); |
2998 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t h(43, 6, 7); |
2999 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t i(3, 6, 77); |
3000 | 1 | std::vector<point3_t> control_points; | |
3001 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(a); |
3002 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(b); |
3003 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(c); |
3004 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(d); |
3005 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(e); |
3006 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(f); |
3007 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(g); |
3008 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(h); |
3009 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points.push_back(i); |
3010 | 1 | bezier_t::num_t T_min = 1.0; | |
3011 | 1 | bezier_t::num_t T_max = 3.0; | |
3012 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t bc_0(control_points.begin(), control_points.end(), T_min, T_max); |
3013 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier3_t bc3_0(control_points.begin(), control_points.end(), T_min, T_max); |
3014 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bezier_t bc_1(bc_0); |
3015 | // std::cout<<"Should call Bezier method : "<<std::endl; | ||
3016 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (bc_1 != bc_0) { |
3017 | ✗ | std::cout << "bc_0 and bc_1 should be equals" << std::endl; | |
3018 | ✗ | error = true; | |
3019 | } | ||
3020 | 1 | std::vector<point3_t> control_points2; | |
3021 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points2.push_back(a); |
3022 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points2.push_back(b); |
3023 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points2.push_back(c); |
3024 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points2.push_back(d); |
3025 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t bc_2(control_points2.begin(), control_points2.end(), T_min, T_max); |
3026 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier3_t bc3_2(control_points2.begin(), control_points2.end(), T_min, T_max); |
3027 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (bc_2 == bc_0) { |
3028 | ✗ | std::cout << "bc_0 and bc_2 should not be equals" << std::endl; | |
3029 | ✗ | error = true; | |
3030 | } | ||
3031 | |||
3032 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t e3(3, 61.9, 7); |
3033 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t g3(-3, 36, 7); |
3034 | 1 | std::vector<point3_t> control_points3; | |
3035 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points3.push_back(a); |
3036 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points3.push_back(b); |
3037 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points3.push_back(c); |
3038 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points3.push_back(d); |
3039 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points3.push_back(e3); |
3040 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points3.push_back(f); |
3041 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points3.push_back(g3); |
3042 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points3.push_back(h); |
3043 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | control_points3.push_back(i); |
3044 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | bezier_t bc_0_3(control_points3.begin(), control_points3.end(), T_min, T_max); |
3045 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (bc_0_3 == bc_0) { |
3046 | ✗ | std::cout << "bc_0_3 and bc_0 should not be equals" << std::endl; | |
3047 | ✗ | error = true; | |
3048 | } | ||
3049 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t pol_2 = polynomial_from_curve<polynomial_t>(bc_2); |
3050 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial3_t pol3_2 = polynomial_from_curve<polynomial3_t>(bc3_2); |
3051 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bezier_t bc_3 = bezier_from_curve<bezier_t>(pol_2); |
3052 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (bc_2 != bc_3) { |
3053 | ✗ | std::cout << "bc_2 and bc_3 should be equals" << std::endl; | |
3054 | ✗ | error = true; | |
3055 | } | ||
3056 | |||
3057 | // test bezier / polynomial | ||
3058 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t pol_0 = polynomial_from_curve<polynomial_t>(bc_0); |
3059 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | CompareCurves<polynomial_t, bezier_t>(pol_0, bc_0, "compare pol_0 and bc_0", |
3060 | error); | ||
3061 | // std::cout<<"Should call curve_abc method : "<<std::endl; | ||
3062 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1 | if (!bc_0.isEquivalent(&pol_0)) { |
3063 | ✗ | std::cout << "bc_0 and pol_0 should be equivalent" << std::endl; | |
3064 | ✗ | error = true; | |
3065 | } | ||
3066 | |||
3067 | // test with hermite : | ||
3068 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t ch_p0(1, 2, 3); |
3069 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t ch_m0(2, 3, 4); |
3070 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t ch_p1(3, 4, 5); |
3071 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t ch_m1(3, 6, 7); |
3072 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pair_point_tangent_t pair0(ch_p0, ch_m0); |
3073 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pair_point_tangent_t pair1(ch_p1, ch_m1); |
3074 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | t_pair_point_tangent_t ch_control_points; |
3075 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ch_control_points.push_back(pair0); |
3076 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ch_control_points.push_back(pair1); |
3077 | 1 | std::vector<double> time_control_points; | |
3078 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points.push_back(T_min); |
3079 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | time_control_points.push_back(T_max); |
3080 | cubic_hermite_spline_t chs0(ch_control_points.begin(), | ||
3081 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | ch_control_points.end(), time_control_points); |
3082 | cubic_hermite_spline_t chs1(ch_control_points.begin(), | ||
3083 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | ch_control_points.end(), time_control_points); |
3084 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | cubic_hermite_spline_t chs2(chs0); |
3085 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t ch_p2(3.1, 4, 5); |
3086 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t ch_m2(3, 6.5, 6.); |
3087 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pair_point_tangent_t pair2(ch_p2, ch_m2); |
3088 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | t_pair_point_tangent_t ch_control_points2; |
3089 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ch_control_points2.push_back(pair0); |
3090 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ch_control_points2.push_back(pair2); |
3091 | cubic_hermite_spline_t chs3(ch_control_points2.begin(), | ||
3092 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | ch_control_points2.end(), time_control_points); |
3093 | // std::cout<<"Should call hermite method : "<<std::endl; | ||
3094 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (chs0 != chs1) { |
3095 | ✗ | std::cout << "chs0 and chs1 should be equals" << std::endl; | |
3096 | ✗ | error = true; | |
3097 | } | ||
3098 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (chs0 != chs2) { |
3099 | ✗ | std::cout << "chs0 and chs2 should be equals" << std::endl; | |
3100 | ✗ | error = true; | |
3101 | } | ||
3102 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (chs0 == chs3) { |
3103 | ✗ | std::cout << "chs0 and chs3 should not be equals" << std::endl; | |
3104 | ✗ | error = true; | |
3105 | } | ||
3106 | |||
3107 | // // test bezier / hermite | ||
3108 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bezier_t bc_ch = bezier_from_curve<bezier_t>(chs0); |
3109 | // std::cout<<"Should call curve_abc method : "<<std::endl; | ||
3110 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1 | if (!chs0.isEquivalent(&bc_ch)) { |
3111 | ✗ | std::cout << "chs0 and bc_ch should be equivalent" << std::endl; | |
3112 | ✗ | error = true; | |
3113 | } | ||
3114 | // test polynomial / hermite | ||
3115 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial_t pol_ch = polynomial_from_curve<polynomial_t>(chs0); |
3116 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1 | if (!chs0.isEquivalent(&pol_ch)) { |
3117 | ✗ | std::cout << "chs0 and pol_ch should be equivalent" << std::endl; | |
3118 | ✗ | error = true; | |
3119 | } | ||
3120 | |||
3121 | // SO3 | ||
3122 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion_t q0(1, 0, 0, 0); |
3123 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion_t q1(0.7071, 0.7071, 0, 0); |
3124 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | q0.normalize(); |
3125 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | q1.normalize(); |
3126 | 1 | const double tMin = 0.; | |
3127 | 1 | const double tMax = 1.5; | |
3128 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SO3Linear_t so3Traj1(q0, q1, tMin, tMax); |
3129 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SO3Linear_t so3Traj2(q0, q1, tMin, tMax); |
3130 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | SO3Linear_t so3TrajMatrix1(q0.toRotationMatrix(), q1.toRotationMatrix(), tMin, |
3131 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tMax); |
3132 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SO3Linear_t so3TrajMatrix2(so3TrajMatrix1); |
3133 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion_t q2(0.7071, 0., 0.7071, 0); |
3134 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | q2.normalize(); |
3135 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SO3Linear_t so3Traj3(q0, q2, tMin, tMax); |
3136 | // std::cout<<"Should call SO3 method : "<<std::endl; | ||
3137 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (so3Traj1 != so3Traj2) { |
3138 | ✗ | std::cout << "so3Traj1 and so3Traj2 should be equals" << std::endl; | |
3139 | ✗ | error = true; | |
3140 | } | ||
3141 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (so3Traj1 != so3TrajMatrix1) { |
3142 | ✗ | std::cout << "so3Traj1 and so3TrajMatrix1 should be equals" << std::endl; | |
3143 | ✗ | error = true; | |
3144 | } | ||
3145 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (so3Traj1 != so3TrajMatrix2) { |
3146 | ✗ | std::cout << "so3Traj1 and so3TrajMatrix2 should be equals" << std::endl; | |
3147 | ✗ | error = true; | |
3148 | } | ||
3149 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (so3Traj1 == so3Traj3) { |
3150 | ✗ | std::cout << "so3Traj1 and so3Traj3 should not be equals" << std::endl; | |
3151 | ✗ | error = true; | |
3152 | } | ||
3153 | |||
3154 | // test from pointer : | ||
3155 |
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 | curve_ptr_t c_ptr1(new bezier_t(bc_0)); |
3156 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | curve_abc_t* c_ptr2 = new bezier_t(bc_0); |
3157 |
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 | curve_ptr_t c_ptr3(new polynomial_t(pol_0)); |
3158 | // std::cout<<"Should call bezier method : "<<std::endl; | ||
3159 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
|
1 | if (!c_ptr1->isApprox(c_ptr2)) { |
3160 | ✗ | std::cout << "c_ptr1 and c_ptr2 should be approx" << std::endl; | |
3161 | ✗ | error = true; | |
3162 | } | ||
3163 | // std::cout<<"Should call curve_abc method : "<<std::endl; | ||
3164 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
|
1 | if (!c_ptr2->isEquivalent(c_ptr3.get())) { |
3165 | ✗ | std::cout << "c_ptr2 and c_ptr3 should be equivalent" << std::endl; | |
3166 | ✗ | error = true; | |
3167 | } | ||
3168 |
2/4✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
1 | if (c_ptr1->isApprox(c_ptr3.get())) { |
3169 | ✗ | std::cout << "c_ptr1 and c_ptr3 should not be approx" << std::endl; | |
3170 | ✗ | error = true; | |
3171 | } | ||
3172 | |||
3173 | // SE3 | ||
3174 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomial3_t pol3_0 = polynomial_from_curve<polynomial3_t>(bc3_0); |
3175 | std::shared_ptr<bezier3_t> translation_bezier = | ||
3176 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | std::make_shared<bezier3_t>(bc3_0); |
3177 | std::shared_ptr<bezier3_t> translation_bezier2 = | ||
3178 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | std::make_shared<bezier3_t>(bc3_0); |
3179 | std::shared_ptr<polynomial3_t> translation_polynomial = | ||
3180 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | std::make_shared<polynomial3_t>(pol3_0); |
3181 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SE3Curve_t se3_bezier1 = SE3Curve_t(translation_bezier, q0.toRotationMatrix(), |
3182 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | q1.toRotationMatrix()); |
3183 | SE3Curve_t se3_bezier12 = SE3Curve_t( | ||
3184 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | translation_bezier2, q0.toRotationMatrix(), q1.toRotationMatrix()); |
3185 | SE3Curve_t se3_pol1 = SE3Curve_t( | ||
3186 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | translation_polynomial, q0.toRotationMatrix(), q1.toRotationMatrix()); |
3187 | 1 | SE3Curve_t se3_bezier2(se3_bezier1); | |
3188 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SE3Curve_t se3_bezier3 = SE3Curve_t(translation_bezier, q0.toRotationMatrix(), |
3189 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | q2.toRotationMatrix()); |
3190 | std::shared_ptr<polynomial3_t> translation_polynomial2 = | ||
3191 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | std::make_shared<polynomial3_t>(pol3_2); |
3192 | SE3Curve_t se3_pol2 = SE3Curve_t( | ||
3193 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
1 | translation_polynomial2, q0.toRotationMatrix(), q1.toRotationMatrix()); |
3194 | // std::cout<<"Should call se3 method : "<<std::endl; | ||
3195 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (se3_bezier1 == se3_pol1) { |
3196 | ✗ | std::cout << "se3_bezier1 and se3_pol1 should not be equals" << std::endl; | |
3197 | ✗ | error = true; | |
3198 | } | ||
3199 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1 | if (se3_bezier1.isApprox(se3_pol1)) { |
3200 | ✗ | std::cout << "se3_bezier1 and se3_pol1 should not be approx" << std::endl; | |
3201 | ✗ | error = true; | |
3202 | } | ||
3203 | // std::cout<<"Should call curve_abc : "<<std::endl; | ||
3204 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1 | if (!se3_bezier1.isEquivalent(&se3_pol1)) { |
3205 | ✗ | std::cout << "se3_bezier1 and se3_pol1 should be equivalent" << std::endl; | |
3206 | ✗ | error = true; | |
3207 | } | ||
3208 | // std::cout<<"Should call se3 method : "<<std::endl; | ||
3209 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (se3_bezier1 != se3_bezier2) { |
3210 | ✗ | std::cout << "se3_bezier1 and se3_bezier2 should be equals" << std::endl; | |
3211 | ✗ | error = true; | |
3212 | } | ||
3213 | // std::cout<<"Should call se3 -> bezier / SO3 method : "<<std::endl; | ||
3214 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (se3_bezier1 != se3_bezier12) { |
3215 | ✗ | std::cout << "se3_bezier1 and se3_bezier12 should be equals" << std::endl; | |
3216 | ✗ | error = true; | |
3217 | } | ||
3218 | // std::cout<<"Should call se3 -> curve_abc : "<<std::endl; | ||
3219 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (se3_bezier1 == se3_pol2) { |
3220 | ✗ | std::cout << "se3_bezier1 and se3_pol2 should not be equals" << std::endl; | |
3221 | ✗ | error = true; | |
3222 | } | ||
3223 | // std::cout<<"Should call se3 -> so3 method : "<<std::endl; | ||
3224 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (se3_bezier1 == se3_bezier3) { |
3225 | ✗ | std::cout << "se3_bezier1 and se3_bezier3 should not be equals" | |
3226 | ✗ | << std::endl; | |
3227 | ✗ | error = true; | |
3228 | } | ||
3229 | |||
3230 | // Piecewises | ||
3231 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t a0(1, 2, 3); |
3232 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t b0(2, 3, 4); |
3233 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t c0(3, 4, 5); |
3234 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t d0(4, 5, 6); |
3235 | 1 | std::vector<point3_t> params0; | |
3236 | 1 | std::vector<point3_t> params1; | |
3237 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params0.push_back(a0); // bezier between [0,1] |
3238 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params0.push_back(b0); |
3239 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params0.push_back(c0); |
3240 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params0.push_back(d0); |
3241 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params1.push_back(d0); // bezier between [1,2] |
3242 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params1.push_back(c0); |
3243 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params1.push_back(b0); |
3244 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | params1.push_back(a0); |
3245 | std::shared_ptr<bezier_t> bc0_ptr = | ||
3246 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | std::make_shared<bezier_t>(params0.begin(), params0.end(), 0., 1.); |
3247 | std::shared_ptr<bezier_t> bc1_ptr = | ||
3248 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | std::make_shared<bezier_t>(params1.begin(), params1.end(), 1., 2.); |
3249 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | piecewise_t pc_C0(bc0_ptr); |
3250 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | pc_C0.add_curve_ptr(bc1_ptr); |
3251 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | piecewise_t pc_C1(bc0_ptr); |
3252 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | pc_C1.add_curve_ptr(bc1_ptr); |
3253 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | piecewise_t pc_C2(pc_C0); |
3254 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | piecewise_t pc_C3(bc0_ptr); |
3255 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | piecewise_t pc_C4(bc0_ptr); |
3256 | std::shared_ptr<bezier_t> bc2_ptr = | ||
3257 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | std::make_shared<bezier_t>(params0.begin(), params0.end(), 1., 2.); |
3258 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | pc_C4.add_curve_ptr(bc2_ptr); |
3259 | // std::cout<<"Should call piecewise method -> bezier , bezier: "<<std::endl; | ||
3260 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (pc_C0 != pc_C1) { |
3261 | ✗ | std::cout << "pc_C0 and pc_C1 should be equals" << std::endl; | |
3262 | ✗ | error = true; | |
3263 | } | ||
3264 | // std::cout<<"Should call piecewise method -> bezier , bezier: "<<std::endl; | ||
3265 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (pc_C0 != pc_C2) { |
3266 | ✗ | std::cout << "pc_C0 and pc_C2 should be equals" << std::endl; | |
3267 | ✗ | error = true; | |
3268 | } | ||
3269 | // std::cout<<"Should call piecewise method: "<<std::endl; | ||
3270 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (pc_C0 == pc_C3) { |
3271 | ✗ | std::cout << "pc_C0 and pc_C3 should not be equals" << std::endl; | |
3272 | ✗ | error = true; | |
3273 | } | ||
3274 | // std::cout<<"Should call piecewise method -> bezier , bezier: "<<std::endl; | ||
3275 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (pc_C0 == pc_C4) { |
3276 | ✗ | std::cout << "pc_C0 and pc_C4 should not be equals" << std::endl; | |
3277 | ✗ | error = true; | |
3278 | } | ||
3279 | // piecewise with mixed curves types | ||
3280 | // std::cout<<"Should call piecewise method: "<<std::endl; | ||
3281 | piecewise_t pc_C5 = | ||
3282 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pc_C0.convert_piecewise_curve_to_polynomial<polynomial_t>(); |
3283 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (pc_C0 == pc_C5) { |
3284 | ✗ | std::cout << "pc_C0 and pc_C5 should be not equals" << std::endl; | |
3285 | ✗ | error = true; | |
3286 | } | ||
3287 | // std::cout<<"Should call curve_abc method: "<<std::endl; | ||
3288 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1 | if (!pc_C0.isEquivalent(&pc_C5)) { |
3289 | ✗ | std::cout << "pc_C0 and pc_C5 should be equivalents" << std::endl; | |
3290 | ✗ | error = true; | |
3291 | } | ||
3292 | |||
3293 | // piecewise se3 : | ||
3294 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | piecewise_SE3_t pc_se3_1; |
3295 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pc_se3_1.add_curve(se3_pol1); |
3296 | point3_t p_init_se3( | ||
3297 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | translation_polynomial->operator()(translation_polynomial->max())); |
3298 | point3_t dp_init_se3( | ||
3299 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | translation_polynomial->derivate(translation_polynomial->max(), 1)); |
3300 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t p_end_se3(1, -2, 6); |
3301 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | point3_t dp_end_se3(3.5, 2.5, -9); |
3302 | std::shared_ptr<polynomial3_t> translation_pol3 = | ||
3303 | std::make_shared<polynomial3_t>(p_init_se3, dp_init_se3, p_end_se3, | ||
3304 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | dp_end_se3, translation_polynomial->max(), |
3305 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | translation_polynomial->max() + 2.5); |
3306 | curve_SE3_ptr_t se3_pol_3(new SE3Curve_t( | ||
3307 |
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.
|
1 | translation_pol3, q1.toRotationMatrix(), q2.toRotationMatrix())); |
3308 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pc_se3_1.add_curve_ptr(se3_pol_3); |
3309 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | piecewise_SE3_t pc_se3_2(pc_se3_1); |
3310 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | piecewise_SE3_t pc_se3_3(std::make_shared<SE3Curve_t>(se3_pol1)); |
3311 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pc_se3_3.add_curve_ptr(se3_pol_3); |
3312 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | piecewise_SE3_t pc_se3_4(std::make_shared<SE3Curve_t>(se3_pol2)); |
3313 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pc_se3_4.add_curve_ptr(se3_pol_3); |
3314 | // std::cout<<"Should call piecewise method -> SE3 , SE3: "<<std::endl; | ||
3315 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (pc_se3_1 != pc_se3_2) { |
3316 | ✗ | std::cout << "pc_se3_1 and pc_se3_2 should be equals" << std::endl; | |
3317 | ✗ | error = true; | |
3318 | } | ||
3319 | // std::cout<<"Should call piecewise method -> SE3 , SE3: "<<std::endl; | ||
3320 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (pc_se3_1 != pc_se3_3) { |
3321 | ✗ | std::cout << "pc_se3_1 and pc_se3_3 should be equals" << std::endl; | |
3322 | ✗ | error = true; | |
3323 | } | ||
3324 | // std::cout<<"Should call piecewise method -> SE3 -> polynomial : | ||
3325 | // "<<std::endl; | ||
3326 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | if (pc_se3_1 == pc_se3_4) { |
3327 | ✗ | std::cout << "pc_se3_1 and pc_se3_3 should not be equals" << std::endl; | |
3328 | ✗ | error = true; | |
3329 | } | ||
3330 | 1 | } | |
3331 | |||
3332 | 1 | int main(int /*argc*/, char** /*argv[]*/) { | |
3333 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | std::cout << "performing tests... \n"; |
3334 | 1 | bool error = false; | |
3335 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | PolynomialCubicFunctionTest(error); |
3336 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ExactCubicNoErrorTest(error); |
3337 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ExactCubicPointsCrossedTest( |
3338 | error); // checks that given wayPoints are crossed | ||
3339 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ExactCubicTwoPointsTest(error); |
3340 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ExactCubicOneDimTest(error); |
3341 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ExactCubicVelocityConstraintsTest(error); |
3342 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | EffectorTrajectoryTest(error); |
3343 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | EffectorSplineRotationNoRotationTest(error); |
3344 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | EffectorSplineRotationRotationTest(error); |
3345 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | TestReparametrization(error); |
3346 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | EffectorSplineRotationWayPointRotationTest(error); |
3347 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | BezierCurveTest(error); |
3348 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | BezierDerivativeCurveTest(error); |
3349 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | BezierDerivativeCurveConstraintTest(error); |
3350 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | BezierCurveTestCompareHornerAndBernstein(error); |
3351 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | BezierDerivativeCurveTimeReparametrizationTest(error); |
3352 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | BezierEvalDeCasteljau(error); |
3353 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | BezierSplitCurve(error); |
3354 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | BezierElevate(error); |
3355 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CubicHermitePairsPositionDerivativeTest(error); |
3356 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | piecewiseCurveTest(error); |
3357 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | PiecewisePolynomialCurveFromDiscretePoints(error); |
3358 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | PiecewisePolynomialCurveFromFile(error); |
3359 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | toPolynomialConversionTest(error); |
3360 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | cubicConversionTest(error); |
3361 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | curveAbcDimDynamicTest(error); |
3362 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | serializationCurvesTest(error); |
3363 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | polynomialFromBoundaryConditions(error); |
3364 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | so3LinearTest(error); |
3365 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SO3serializationTest(error); |
3366 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | se3CurveTest(error); |
3367 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | Se3serializationTest(error); |
3368 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | BezierLinearProblemsetup_control_pointsNoConstraint(error); |
3369 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | BezierLinearProblemsetup_control_pointsVarCombinatorialInit(error); |
3370 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | BezierLinearProblemsetup_control_pointsVarCombinatorialEnd(error); |
3371 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | BezierLinearProblemsetup_control_pointsVarCombinatorialMix(error); |
3372 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | BezierLinearProblemsetupLoadProblem(error); |
3373 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | testOperatorEqual(error); |
3374 | |||
3375 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (error) { |
3376 | ✗ | std::cout << "There were some errors\n"; | |
3377 | ✗ | return -1; | |
3378 | } else { | ||
3379 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | std::cout << "no errors found \n"; |
3380 | 1 | return 0; | |
3381 | } | ||
3382 | } | ||
3383 |