48 #include <visp3/core/vpColVector.h> 49 #include <visp3/core/vpGaussRand.h> 50 #include <visp3/core/vpMath.h> 54 bool test(
const std::string &s,
const vpColVector &v,
const std::vector<double> &bench)
56 static unsigned int cpt = 0;
57 std::cout <<
"** Test " << ++cpt << std::endl;
58 std::cout << s <<
"(" << v.
getRows() <<
"," << v.
getCols() <<
") = [" << v.
t() <<
"]^T" << std::endl;
59 if (bench.size() != v.
size()) {
60 std::cout <<
"Test fails: bad size wrt bench" << std::endl;
63 for (
unsigned int i = 0; i < v.
size(); i++) {
64 if (std::fabs(v[i] - bench[i]) > std::fabs(v[i]) * std::numeric_limits<double>::epsilon()) {
65 std::cout <<
"Test fails: bad content" << std::endl;
73 double getRandomValues(
double min,
double max)
75 return (max - min) * ((double)rand() / (double)RAND_MAX) + min;
84 std::cerr <<
"Issue with vpColVector comparison operator." << std::endl;
89 std::cerr <<
"Issue with vpColVector comparison operator." << std::endl;
94 std::cerr <<
"Issue with vpColVector comparison operator." << std::endl;
103 std::vector<double> bench1(4, 3);
104 if (test(
"v", v, bench1) ==
false)
106 std::vector<double> bench2(4, 3. / 6);
108 if (test(
"v", v, bench2) ==
false)
112 std::vector<double> bench3(5, 0);
113 if (test(
"v", v, bench3) ==
false)
119 std::vector<double> bench1(4);
120 for (
unsigned int i = 0; i < v.
size(); i++) {
122 bench1[i] = (double)i;
124 if (test(
"v", v, bench1) ==
false)
129 std::vector<double> bench2;
132 if (test(
"w", w, bench2) ==
false)
135 std::vector<double> bench3;
141 for (
size_t i = 0; i < 4; i++)
145 if (test(
"r2", r2, bench3) ==
false)
151 std::vector<double> bench(4);
152 for (
unsigned int i = 0; i < M.getRows(); i++) {
156 if (test(
"M", M, bench) ==
false)
160 if (test(
"v", v, bench) ==
false)
163 if (test(
"w", w, bench) ==
false)
166 if (test(
"z1", z1, bench) ==
false)
169 if (test(
"z2", z2, bench) ==
false)
178 std::vector<double> bench1;
186 if (test(
"w", w, bench1) ==
false)
190 if (test(
"x", x, bench1) ==
false)
193 std::vector<float> bench2;
198 if (test(
"y1", y1, bench1) ==
false)
201 if (test(
"y2", y2, bench1) ==
false)
208 std::vector<double> bench(3, -1);
210 if (test(
"r2", r2, bench) ==
false)
214 if (test(
"r2", r2, bench) ==
false)
217 std::vector<double> bench3(7, 1);
218 bench3[3] = bench3[4] = bench3[5] = -1;
220 if (test(
"r3", r3, bench3) ==
false)
224 if (test(
"r1", r1, bench3) ==
false)
231 std::cout <<
"test r1: " << r1 << std::endl;
232 std::cout <<
"test r2: " << r2 << std::endl;
234 std::cout <<
"test r1+r2: " << r1 + r2 << std::endl;
235 std::cout <<
"test r: " << r << std::endl;
236 std::vector<double> bench(3, 6);
237 if (test(
"r", r, bench) ==
false)
240 if (test(
"r1", r1, bench) ==
false)
248 std::vector<double> bench(3, -2);
249 if (test(
"r", r, bench) ==
false)
252 if (test(
"r1", r1, bench) ==
false)
261 std::vector<double> bench(5, 5);
262 if (test(
"r", r, bench) ==
false)
281 std::cout <<
"** Test mean" << std::endl;
284 std::cout <<
"Test fails: bad mean " << res << std::endl;
288 std::cout <<
"** Test stdev" << std::endl;
291 std::cout <<
"Test fails: bad stdev " << res << std::endl;
295 std::cout <<
"** Test stdev(bessel)" << std::endl;
298 std::cout <<
"Test fails: bad stdev(bessel) " << res << std::endl;
302 std::cout <<
"** Test median" << std::endl;
305 std::cout <<
"Test fails: bad median " << res << std::endl;
310 std::cout <<
"** Test median (odd)" << std::endl;
314 std::cout <<
"Test fails: bad median (odd) " << res << std::endl;
317 std::cout <<
"r: [" << r <<
"]^T" << std::endl;
318 r.
print(std::cout, 8,
"r");
323 unsigned int nb = 1000;
324 const unsigned int size = 10000;
325 std::vector<vpColVector> vec(nb);
327 for (
size_t i = 0; i < nb; i++) {
329 for (
unsigned int j = 0; j < size; j++) {
330 v[j] = getRandomValues(-100.0, 100.0);
337 for (
unsigned int i = 0; i < nb; i++) {
338 v_big.insert(i * size, vec[(
size_t)i]);
341 std::cout <<
"\nBig insert: " << t <<
" ms" << std::endl;
343 for (
unsigned int i = 0; i < nb; i++) {
344 for (
unsigned int j = 0; j < size; j++) {
345 if (!
vpMath::equal(v_big[i * size + j], vec[(
size_t)i][j], std::numeric_limits<double>::epsilon())) {
346 std::cerr <<
"Problem in vpColVector insert()!" << std::endl;
357 std::cout <<
"Insert empty vectors:" << std::endl;
358 std::cout <<
"v1: " << v1.t() << std::endl;
359 std::cout <<
"v2: " << v2.
t() << std::endl;
360 std::cout <<
"v3: " << v3.
t() << std::endl;
364 std::cout <<
"** Test conversion to/from std::vector" << std::endl;
365 std::vector<double> std_vector(5);
366 for (
size_t i = 0; i < std_vector.size(); i++) {
367 std_vector[i] = (double) i;
370 if (test(
"v", v, std_vector) ==
false)
375 if (test(
"v", v, std_vector) ==
false)
378 std::cout <<
"\nAll tests succeed" << std::endl;
Implementation of a matrix and operations on matrices.
vpColVector extract(unsigned int r, unsigned int colsize) const
static bool equal(double x, double y, double s=0.001)
unsigned int size() const
Return the number of elements of the 2D array.
unsigned int getCols() const
VISP_EXPORT double measureTimeMs()
static double median(const vpColVector &v)
int print(std::ostream &s, unsigned int length, char const *intro=0) const
vpColVector & normalize()
static double mean(const vpColVector &v)
unsigned int getRows() const
void insert(unsigned int i, const vpColVector &v)
std::vector< double > toStdVector()
void resize(unsigned int i, bool flagNullify=true)
Implementation of column vector and the associated operations.
void init(const vpColVector &v, unsigned int r, unsigned int nrows)
static double stdev(const vpColVector &v, bool useBesselCorrection=false)