• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
Factory(void *)20         static Test* Factory(void*) {return SkNEW(BitmapHasherTestClass); }
21     protected:
onGetName(SkString * name)22         virtual void onGetName(SkString* name) { name->set("BitmapHasher"); }
onRun(Reporter * reporter)23         virtual void onRun(Reporter* reporter) {
24             this->fReporter = reporter;
25             RunTest();
26         }
27     private:
28 
29         // Fill in bitmap with test data.
CreateTestBitmap(SkBitmap & bitmap,SkBitmap::Config config,int width,int height,SkColor color)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 
RunTest()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