From 4ccda3959e0244a6a8d1f136384043f5a700a57c Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 21 Nov 2017 14:27:29 +0100 Subject: [PATCH] Show more information for wxImage::Scale() unit test failures Output the maximal difference between the differing images pixels to show just how far are they from each other, exactly. And show the image file name as well, for convenience. Also run all checks instead of stopping after the first failing one. --- tests/image/image.cpp | 46 +++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/tests/image/image.cpp b/tests/image/image.cpp index a4692d509c..ae8a301e8e 100644 --- a/tests/image/image.cpp +++ b/tests/image/image.cpp @@ -1320,8 +1320,8 @@ void ImageTestCase::BMPFlippingAndRLECompression() } -static bool -CompareApprox(const wxImage& i1, const wxImage& i2) +static int +FindMaxChannelDiff(const wxImage& i1, const wxImage& i2) { if ( i1.GetWidth() != i2.GetWidth() ) return false; @@ -1332,27 +1332,22 @@ CompareApprox(const wxImage& i1, const wxImage& i2) const unsigned char* p1 = i1.GetData(); const unsigned char* p2 = i2.GetData(); const int numBytes = i1.GetWidth()*i1.GetHeight()*3; + int maxDiff = 0; for ( int n = 0; n < numBytes; n++, p1++, p2++ ) { - switch ( *p1 - *p2 ) - { - case -1: - case 0: - case +1: - // Accept up to one pixel difference, this happens because of - // different rounding behaviours in different compiler versions - // even under the same architecture, see the example in - // http://thread.gmane.org/gmane.comp.lib.wxwidgets.devel/151149/focus=151154 - break; - - default: - return false; - } + const int diff = std::abs(*p1 - *p2); + if ( diff > maxDiff ) + maxDiff = diff; } - return true; + return maxDiff; } +// Note that we accept up to one pixel difference, this happens because of +// different rounding behaviours in different compiler versions +// even under the same architecture, see the example in +// http://thread.gmane.org/gmane.comp.lib.wxwidgets.devel/151149/focus=151154 + // The 0 below can be replaced with 1 to generate, instead of comparing with, // the test files. #define ASSERT_IMAGE_EQUAL_TO_FILE(image, file) \ @@ -1362,13 +1357,16 @@ CompareApprox(const wxImage& i1, const wxImage& i2) } \ else \ { \ - wxImage imageFromFile(file); \ - CPPUNIT_ASSERT_MESSAGE( "Failed to load " file, imageFromFile.IsOk() ); \ - CPPUNIT_ASSERT_MESSAGE \ - ( \ - "Wrong scaled " + Catch::toString(image), \ - CompareApprox(imageFromFile, image) \ - ); \ + const wxImage imageFromFile(file); \ + if ( imageFromFile.IsOk() ) \ + { \ + INFO("Wrong scaled \"" << file << "\" " << Catch::toString(image)); \ + CHECK(FindMaxChannelDiff(imageFromFile, image) <= 1); \ + } \ + else \ + { \ + FAIL("Failed to load \"" << file << "\""); \ + } \ } void ImageTestCase::ScaleCompare()