1 2 /* 3 * Copyright 2013 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 #include "Test.h" 9 10 #include "SkBitmap.h" 11 #include "SkBitmapHasher.h" 12 #include "SkColor.h" 13 14 // Word size that is large enough to hold results of any checksum type. 15 typedef uint64_t checksum_result; 16 17 namespace skiatest { 18 class BitmapHasherTestClass : public Test { 19 public: 20 static Test* Factory(void*) {return SkNEW(BitmapHasherTestClass); } 21 protected: 22 virtual void onGetName(SkString* name) { name->set("BitmapHasher"); } 23 virtual void onRun(Reporter* reporter) { 24 this->fReporter = reporter; 25 RunTest(); 26 } 27 private: 28 29 // Fill in bitmap with test data. 30 void CreateTestBitmap(SkBitmap &bitmap, SkBitmap::Config config, int width, int height, 31 SkColor color) { 32 bitmap.setConfig(config, width, height); 33 REPORTER_ASSERT(fReporter, bitmap.allocPixels()); 34 bitmap.setAlphaType(kOpaque_SkAlphaType); 35 bitmap.eraseColor(color); 36 } 37 38 void RunTest() { 39 // Test SkBitmapHasher 40 SkBitmap bitmap; 41 uint64_t digest; 42 // initial test case 43 CreateTestBitmap(bitmap, SkBitmap::kARGB_8888_Config, 333, 555, SK_ColorBLUE); 44 REPORTER_ASSERT(fReporter, SkBitmapHasher::ComputeDigest(bitmap, &digest)); 45 REPORTER_ASSERT(fReporter, digest == 0xfb2903562766ef87ULL); 46 // same pixel data but different dimensions should yield a different checksum 47 CreateTestBitmap(bitmap, SkBitmap::kARGB_8888_Config, 555, 333, SK_ColorBLUE); 48 REPORTER_ASSERT(fReporter, SkBitmapHasher::ComputeDigest(bitmap, &digest)); 49 REPORTER_ASSERT(fReporter, digest == 0xfe04023fb97d0f61ULL); 50 // same dimensions but different color should yield a different checksum 51 CreateTestBitmap(bitmap, SkBitmap::kARGB_8888_Config, 555, 333, SK_ColorGREEN); 52 REPORTER_ASSERT(fReporter, SkBitmapHasher::ComputeDigest(bitmap, &digest)); 53 REPORTER_ASSERT(fReporter, digest == 0x2423c51cad6d1edcULL); 54 } 55 56 Reporter* fReporter; 57 }; 58 59 static TestRegistry gReg(BitmapHasherTestClass::Factory); 60 } 61