/* * Copyright 2013 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "Test.h" #include "SkBitmap.h" #include "SkBitmapHasher.h" #include "SkColor.h" // Word size that is large enough to hold results of any checksum type. typedef uint64_t checksum_result; namespace skiatest { class BitmapHasherTestClass : public Test { public: static Test* Factory(void*) {return SkNEW(BitmapHasherTestClass); } protected: virtual void onGetName(SkString* name) { name->set("BitmapHasher"); } virtual void onRun(Reporter* reporter) { this->fReporter = reporter; RunTest(); } private: // Fill in bitmap with test data. void CreateTestBitmap(SkBitmap &bitmap, SkBitmap::Config config, int width, int height, SkColor color) { bitmap.setConfig(config, width, height); REPORTER_ASSERT(fReporter, bitmap.allocPixels()); bitmap.setIsOpaque(true); bitmap.eraseColor(color); } void RunTest() { // Test SkBitmapHasher SkBitmap bitmap; uint64_t digest; // initial test case CreateTestBitmap(bitmap, SkBitmap::kARGB_8888_Config, 333, 555, SK_ColorBLUE); REPORTER_ASSERT(fReporter, SkBitmapHasher::ComputeDigest(bitmap, &digest)); REPORTER_ASSERT(fReporter, digest == 0xfb2903562766ef87ULL); // same pixel data but different dimensions should yield a different checksum CreateTestBitmap(bitmap, SkBitmap::kARGB_8888_Config, 555, 333, SK_ColorBLUE); REPORTER_ASSERT(fReporter, SkBitmapHasher::ComputeDigest(bitmap, &digest)); REPORTER_ASSERT(fReporter, digest == 0xfe04023fb97d0f61ULL); // same dimensions but different color should yield a different checksum CreateTestBitmap(bitmap, SkBitmap::kARGB_8888_Config, 555, 333, SK_ColorGREEN); REPORTER_ASSERT(fReporter, SkBitmapHasher::ComputeDigest(bitmap, &digest)); REPORTER_ASSERT(fReporter, digest == 0x2423c51cad6d1edcULL); } Reporter* fReporter; }; static TestRegistry gReg(BitmapHasherTestClass::Factory); }