Kaydet (Commit) 07254e70 authored tarafından Michael Meeks's avatar Michael Meeks

tdf#93532 - Bitmap CRC unit tests.

Change-Id: Ic75801d7ad941ba802ffe418d5c666b1e7b0e94f
üst d3dbbf09
......@@ -12,9 +12,13 @@
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/plugin/TestPlugIn.h>
#include <unordered_map>
#include <vcl/bitmap.hxx>
#include <vcl/bmpacc.hxx>
#include <vcl/virdev.hxx>
#include <rtl/strbuf.hxx>
#include <tools/stream.hxx>
#include <vcl/graphicfilter.hxx>
......@@ -27,10 +31,12 @@ class BitmapTest : public CppUnit::TestFixture
{
void testConvert();
void testScale();
void testCRC();
CPPUNIT_TEST_SUITE(BitmapTest);
CPPUNIT_TEST(testConvert);
CPPUNIT_TEST(testScale);
CPPUNIT_TEST(testCRC);
CPPUNIT_TEST_SUITE_END();
};
......@@ -129,6 +135,56 @@ void BitmapTest::testScale()
}
}
typedef std::unordered_map<sal_uInt64, const char *> CRCHash;
void checkAndInsert(CRCHash &rHash, sal_uInt64 nCRC, const char *pLocation)
{
auto it = rHash.find(nCRC);
if (it != rHash.end()) {
OStringBuffer aBuf("CRC collision between ");
aBuf.append(pLocation);
aBuf.append(" and ");
aBuf.append(it->second);
aBuf.append(" hash is 0x");
aBuf.append((sal_Int64)nCRC, 16);
CPPUNIT_FAIL(aBuf.toString().getStr());
}
rHash[nCRC] = pLocation;
}
void checkAndInsert(CRCHash &rHash, Bitmap rBmp, const char *pLocation)
{
checkAndInsert(rHash, rBmp.GetChecksum(), pLocation);
}
Bitmap getAsBitmap(VclPtr<OutputDevice> pOut)
{
return pOut->GetBitmap(Point(), pOut->GetOutputSizePixel());
}
void BitmapTest::testCRC()
{
CRCHash aCRCs;
Bitmap aBitmap(Size(1023,759), 24, 0);
aBitmap.Erase(COL_BLACK);
checkAndInsert(aCRCs, aBitmap, "black bitmap");
aBitmap.Invert();
checkAndInsert(aCRCs, aBitmap, "white bitmap");
ScopedVclPtrInstance<VirtualDevice> aVDev;
aVDev->SetOutputSizePixel(Size(1023, 759));
Bitmap aWhiteCheck = getAsBitmap(aVDev);
CPPUNIT_ASSERT(aCRCs.find(aWhiteCheck.GetChecksum()) != aCRCs.end());
// a 1x1 black & white checkerboard
aVDev->DrawCheckered(Point(), aVDev->GetOutputSizePixel(), 1, 1);
Bitmap aChecker = getAsBitmap(aVDev);
checkAndInsert(aCRCs, aChecker, "checkerboard");
aChecker.Invert();
checkAndInsert(aCRCs, aChecker, "inverted checkerboard");
}
} // namespace
CPPUNIT_TEST_SUITE_REGISTRATION(BitmapTest);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment