45 #include <visp3/core/vpColVector.h>
46 #include <visp3/core/vpGaussRand.h>
47 #include <visp3/core/vpMath.h>
51 bool test(
const std::string &s,
const vpColVector &v,
const std::vector<double> &bench)
53 static unsigned int cpt = 0;
54 std::cout <<
"** Test " << ++cpt << std::endl;
55 std::cout << s <<
"(" << v.
getRows() <<
"," << v.
getCols() <<
") = [" << v.
t() <<
"]^T" << std::endl;
56 if (bench.size() != v.
size()) {
57 std::cout <<
"Test fails: bad size wrt bench" << std::endl;
60 for (
unsigned int i = 0; i < v.
size(); i++) {
61 if (std::fabs(v[i] - bench[i]) > std::fabs(v[i]) * std::numeric_limits<double>::epsilon()) {
62 std::cout <<
"Test fails: bad content" << std::endl;
70 double getRandomValues(
double min,
double max) {
return (max - min) * ((double)rand() / (double)RAND_MAX) + min; }
78 std::cerr <<
"Issue with vpColVector comparison operator." << std::endl;
83 std::cerr <<
"Issue with vpColVector comparison operator." << std::endl;
88 std::cerr <<
"Issue with vpColVector comparison operator." << std::endl;
97 std::vector<double> bench1(4, 3);
98 if (test(
"v", v, bench1) ==
false)
100 std::vector<double> bench2(4, 3. / 6);
102 if (test(
"v", v, bench2) ==
false)
106 std::vector<double> bench3(5, 0);
107 if (test(
"v", v, bench3) ==
false)
113 std::vector<double> bench1(4);
114 for (
unsigned int i = 0; i < v.
size(); i++) {
116 bench1[i] = (double)i;
118 if (test(
"v", v, bench1) ==
false)
123 std::vector<double> bench2;
126 if (test(
"w", w, bench2) ==
false)
129 std::vector<double> bench3;
135 for (
size_t i = 0; i < 4; i++)
139 if (test(
"r2", r2, bench3) ==
false)
145 std::vector<double> bench(4);
146 for (
unsigned int i = 0; i < M.getRows(); i++) {
150 if (test(
"M", M, bench) ==
false)
154 if (test(
"v", v, bench) ==
false)
157 if (test(
"w", w, bench) ==
false)
160 if (test(
"z1", z1, bench) ==
false)
163 if (test(
"z2", z2, bench) ==
false)
172 std::vector<double> bench1;
180 if (test(
"w", w, bench1) ==
false)
184 if (test(
"x", x, bench1) ==
false)
187 std::vector<float> bench2;
192 if (test(
"y1", y1, bench1) ==
false)
195 if (test(
"y2", y2, bench1) ==
false)
202 std::vector<double> bench(3, -1);
204 if (test(
"r2", r2, bench) ==
false)
208 if (test(
"r2", r2, bench) ==
false)
211 std::vector<double> bench3(7, 1);
212 bench3[3] = bench3[4] = bench3[5] = -1;
214 if (test(
"r3", r3, bench3) ==
false)
218 if (test(
"r1", r1, bench3) ==
false)
225 std::cout <<
"test r1: " << r1 << std::endl;
226 std::cout <<
"test r2: " << r2 << std::endl;
228 std::cout <<
"test r1+r2: " << r1 + r2 << std::endl;
229 std::cout <<
"test r: " << r << std::endl;
230 std::vector<double> bench(3, 6);
231 if (test(
"r", r, bench) ==
false)
234 if (test(
"r1", r1, bench) ==
false)
242 std::vector<double> bench(3, -2);
243 if (test(
"r", r, bench) ==
false)
246 if (test(
"r1", r1, bench) ==
false)
255 std::vector<double> bench(5, 5);
256 if (test(
"r", r, bench) ==
false)
275 std::cout <<
"** Test mean" << std::endl;
278 std::cout <<
"Test fails: bad mean " << res << std::endl;
282 std::cout <<
"** Test stdev" << std::endl;
285 std::cout <<
"Test fails: bad stdev " << res << std::endl;
289 std::cout <<
"** Test stdev(bessel)" << std::endl;
292 std::cout <<
"Test fails: bad stdev(bessel) " << res << std::endl;
296 std::cout <<
"** Test median" << std::endl;
299 std::cout <<
"Test fails: bad median " << res << std::endl;
304 std::cout <<
"** Test median (odd)" << std::endl;
308 std::cout <<
"Test fails: bad median (odd) " << res << std::endl;
311 std::cout <<
"r: [" << r <<
"]^T" << std::endl;
312 r.
print(std::cout, 8,
"r");
317 unsigned int nb = 1000;
318 const unsigned int size = 10000;
319 std::vector<vpColVector> vec(nb);
321 for (
size_t i = 0; i < nb; i++) {
323 for (
unsigned int j = 0; j < size; j++) {
324 v[j] = getRandomValues(-100.0, 100.0);
331 for (
unsigned int i = 0; i < nb; i++) {
332 v_big.insert(i * size, vec[(
size_t)i]);
335 std::cout <<
"\nBig insert: " << t <<
" ms" << std::endl;
337 for (
unsigned int i = 0; i < nb; i++) {
338 for (
unsigned int j = 0; j < size; j++) {
339 if (!
vpMath::equal(v_big[i * size + j], vec[(
size_t)i][j], std::numeric_limits<double>::epsilon())) {
340 std::cerr <<
"Problem in vpColVector insert()!" << std::endl;
351 std::cout <<
"Insert empty vectors:" << std::endl;
352 std::cout <<
"v1: " << v1.t() << std::endl;
353 std::cout <<
"v2: " << v2.
t() << std::endl;
354 std::cout <<
"v3: " << v3.
t() << std::endl;
358 std::cout <<
"** Test conversion to/from std::vector" << std::endl;
359 std::vector<double> std_vector(5);
360 for (
size_t i = 0; i < std_vector.size(); i++) {
361 std_vector[i] = (double)i;
364 if (test(
"v", v, std_vector) ==
false)
369 if (test(
"v", v, std_vector) ==
false)
374 std::cout <<
"** Test operator == and operator !=" << std::endl;
377 std::cout <<
"v: " << v.
t() <<
" != " << val << std::endl;
381 std::cout <<
"v: " << v.
t() <<
" == " << val << std::endl;
385 std::cout <<
"v: " << v.
t() <<
" == " << val << std::endl;
389 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
void init(const vpColVector &v, unsigned int r, unsigned int nrows)
std::vector< double > toStdVector() const
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 threshold=0.001)
Implementation of a matrix and operations on matrices.
VISP_EXPORT double measureTimeMs()