24 #ifndef _COMPAREIMAGES_H
25 #define _COMPAREIMAGES_H
31 template <
typename T,
typename U>
33 const T& ref,
const U& val,
double atol = 1e-8,
double rtol = 1e-5) {
34 boost::test_tools::predicate_result res(
true);
36 if (
ref->getWidth() != val->getWidth() ||
ref->getHeight() != val->getHeight()) {
38 res.message() <<
"Images do not match in size: "
39 <<
ref->getWidth() <<
'x' <<
ref->getHeight() <<
" vs "
40 << val->getWidth() <<
'x' << val->getHeight();
43 int w =
ref->getWidth(), h =
ref->getHeight();
44 auto ref_chunk =
ref->getChunk(0, 0, w, h);
45 auto val_chunk = val->getChunk(0, 0, w, h);
47 for (
int x = 0;
x <
ref->getWidth(); ++
x) {
48 for (
int y = 0;
y <
ref->getHeight(); ++
y) {
49 auto expected = ref_chunk->getValue(
x,
y);
50 auto value = val_chunk->getValue(
x,
y);
53 res.message() <<
"Not matching values at position " <<
x <<
"," <<
y
54 <<
": " << expected <<
" != " << value <<
"\n";
62 template <
typename T,
typename U>
64 const T& ref,
const U& val,
double atol = 1e-8,
double rtol = 1e-5) {
65 boost::test_tools::predicate_result res(
true);
75 res.message() <<
"Not matching values at position " << i <<
": " << *ref_i <<
" != " << *val_i <<
"\n";
85 res.message() <<
"The sequences have different length!" <<
"\n";
91 boost::test_tools::predicate_result
checkIsClose(
double ref,
const double val,
double atol = 1e-8,
double rtol = 1e-5) {
92 boost::test_tools::predicate_result res(
true);
95 res.message() <<
"Values not close enough: " <<
ref <<
" " << val <<
" with absolute tolerance " <<
atol
96 <<
" and relative " << rtol <<
"\n";
103 #endif // _COMPAREIMAGES_H