Home | History | Annotate | Download | only in tests
      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.setIsOpaque(true);
     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