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;
unsigned int getCols() const
unsigned int size() const
Return the number of elements of the 2D array.
unsigned int getRows() const
Implementation of column vector and the associated operations.
vpColVector extract(unsigned int r, unsigned int colsize) const
vpColVector & normalize()
static double median(const vpColVector &v)
int print(std::ostream &s, unsigned int length, char const *intro=0) const
std::vector< double > toStdVector()
void init(const vpColVector &v, unsigned int r, unsigned int nrows)
static double mean(const vpColVector &v)
static double stdev(const vpColVector &v, bool useBesselCorrection=false)
void insert(unsigned int i, const vpColVector &v)
void resize(unsigned int i, bool flagNullify=true)
static bool equal(double x, double y, double s=0.001)
Implementation of a matrix and operations on matrices.
VISP_EXPORT double measureTimeMs()