43#include <visp3/core/vpMath.h>
44#include <visp3/core/vpRowVector.h>
46#ifdef ENABLE_VISP_NAMESPACE
50bool test(
const std::string &s,
const vpRowVector &v,
const std::vector<double> &bench);
52bool test(
const std::string &s,
const vpRowVector &v,
const std::vector<double> &bench)
54 static unsigned int cpt = 0;
55 std::cout <<
"** Test " << ++cpt << std::endl;
56 std::cout <<
s <<
"(" <<
v.getRows() <<
"," <<
v.getCols() <<
") = [" <<
v <<
"]" << std::endl;
57 if (bench.size() !=
v.size()) {
58 std::cout <<
"Test fails: bad size wrt bench" << std::endl;
61 for (
unsigned int i = 0;
i <
v.size();
i++) {
62 if (std::fabs(v[i] - bench[i]) > std::fabs(v[i]) * std::numeric_limits<double>::epsilon()) {
63 std::cout <<
"Test fails: bad content" << std::endl;
80 std::vector<double> bench1(4, 3);
81 if (test(
"v", v, bench1) ==
false)
83 std::vector<double> bench2(4, 3. / 6);
85 if (test(
"v", v, bench2) ==
false)
89 std::vector<double> bench3(5, 0);
90 if (test(
"v", v, bench3) ==
false)
96 std::vector<double> bench1(4);
97 for (
unsigned int i = 0;
i <
v.size();
i++) {
98 v[
i] =
static_cast<double>(
i);
99 bench1[
i] =
static_cast<double>(
i);
101 if (test(
"v", v, bench1) ==
false)
106 std::vector<double> bench2;
109 if (test(
"w", w, bench2) ==
false)
112 std::vector<double> bench3;
118 for (
size_t i = 0;
i < 4;
i++)
119 r1.
stack(
static_cast<double>(i));
122 if (test(
"r2", r2, bench3) ==
false)
127 std::vector<double> bench(4);
128 for (
unsigned int i = 0;
i < M.getCols();
i++) {
136 if (test(
"v", v, bench) ==
false)
139 if (test(
"w", w, bench) ==
false)
142 if (test(
"z1", z1, bench) ==
false)
145 if (test(
"z2", z2, bench) ==
false)
153 std::vector<double> bench1;
161 if (test(
"w", w, bench1) ==
false)
165 if (test(
"x", x, bench1) ==
false)
168 std::vector<float> bench2;
173 if (test(
"y1", y1, bench1) ==
false)
176 if (test(
"y2", y2, bench1) ==
false)
182 std::vector<double> bench(3, -1);
184 if (test(
"r2", r2, bench) ==
false)
188 if (test(
"r2", r2, bench) ==
false)
191 std::vector<double> bench3(7, 1);
192 bench3[3] = bench3[4] = bench3[5] = -1;
194 if (test(
"r3", r3, bench3) ==
false)
198 if (test(
"r1", r1, bench3) ==
false)
205 std::vector<double> bench(3, 6);
206 if (test(
"r", r, bench) ==
false)
209 if (test(
"r1", r1, bench) ==
false)
216 std::vector<double> bench(3, -2);
217 if (test(
"r", r, bench) ==
false)
220 if (test(
"r1", r1, bench) ==
false)
228 std::vector<double> bench(5, 5);
229 if (test(
"r", r, bench) ==
false)
247 std::cout <<
"** Test mean" << std::endl;
250 std::cout <<
"Test fails: bad mean " << res << std::endl;
254 std::cout <<
"** Test stdev" << std::endl;
257 std::cout <<
"Test fails: bad stdev " << res << std::endl;
261 std::cout <<
"** Test stdev(bessel)" << std::endl;
264 std::cout <<
"Test fails: bad stdev(bessel) " << res << std::endl;
268 std::cout <<
"** Test median" << std::endl;
271 std::cout <<
"Test fails: bad median " << res << std::endl;
276 std::cout <<
"** Test median (odd)" << std::endl;
280 std::cout <<
"Test fails: bad median (odd) " << res << std::endl;
283 std::cout <<
"r: [" <<
r <<
"]" << std::endl;
284 r.print(std::cout, 8,
"r");
288 std::cout <<
"** Test conversion to/from std::vector" << std::endl;
289 std::vector<double> std_vector(5);
290 for (
size_t i = 0;
i < std_vector.size();
i++) {
291 std_vector[
i] =
static_cast<double>(
i);
294 if (test(
"v", v, std_vector) ==
false)
298 std_vector =
v.toStdVector();
299 if (test(
"v", v, std_vector) ==
false)
302 std::cout <<
"All tests succeed" << std::endl;
static bool equal(double x, double y, double threshold=0.001)
Implementation of a matrix and operations on matrices.
Implementation of row vector and the associated operations.
static double mean(const vpRowVector &v)
static double median(const vpRowVector &v)
static double stdev(const vpRowVector &v, bool useBesselCorrection=false)
vpRowVector extract(unsigned int c, unsigned int rowsize) const