From 53626e76b0d9c49d04d58ee949e95d856955d7eb Mon Sep 17 00:00:00 2001 From: Tomoaki Teshima Date: Thu, 2 Jul 2020 17:46:02 +0900 Subject: [PATCH] avoid test failure based on rounding error --- modules/ximgproc/test/test_fbs_filter.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/modules/ximgproc/test/test_fbs_filter.cpp b/modules/ximgproc/test/test_fbs_filter.cpp index a84b7fbfbd0..f966d5b6093 100644 --- a/modules/ximgproc/test/test_fbs_filter.cpp +++ b/modules/ximgproc/test/test_fbs_filter.cpp @@ -86,6 +86,15 @@ TEST(FastBilateralSolverTest, SplatSurfaceAccuracy) } } +#define COUNT_EXCEED(MAT1, MAT2, THRESHOLD, PIXEL_COUNT) \ +{ \ + Mat diff, count; \ + absdiff(MAT1.reshape(1), MAT2.reshape(1), diff); \ + cvtest::compare(diff, THRESHOLD, count, CMP_GT); \ + PIXEL_COUNT = countNonZero(count.reshape(1)); \ + PIXEL_COUNT /= MAT1.channels(); \ +} + TEST(FastBilateralSolverTest, ReferenceAccuracy) { string dir = getDataDir() + "cv/edgefilter"; @@ -104,7 +113,14 @@ TEST(FastBilateralSolverTest, ReferenceAccuracy) double totalMaxError = 1.0/64.0*src.total()*src.channels(); EXPECT_LE(cvtest::norm(res, ref, NORM_L2), totalMaxError); +#if defined (__x86_64__) || defined (_M_X64) EXPECT_LE(cvtest::norm(res, ref, NORM_INF), 1); +#else + // fastBilateralSolverFilter is not bit-exact + int pixelCount = 0; + COUNT_EXCEED(res, ref, 2, pixelCount); + EXPECT_LE(pixelCount, (int)(res.cols*res.rows*1/100)); +#endif } INSTANTIATE_TEST_CASE_P(FullSet, FastBilateralSolverTest,Combine(Values(szODD, szQVGA), SrcTypes::all(), GuideTypes::all()));