1908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.com/*
2908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.com * Copyright 2013 Google Inc.
3908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.com *
4908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.com * Use of this source code is governed by a BSD-style license that can be
5908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.com * found in the LICENSE file.
6908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.com */
7908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.com
8908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.com#include "SkBitmapHasher.h"
9452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org
10452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org#include "SkBitmap.h"
11908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.com#include "SkColor.h"
12452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org#include "Test.h"
13908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.com
14908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.com// Word size that is large enough to hold results of any checksum type.
15908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.comtypedef uint64_t checksum_result;
16908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.com
17452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org// Fill in bitmap with test data.
188ef51b975c2bdb8fa332f091863e5410c18576c7commit-bot@chromium.orgstatic void CreateTestBitmap(SkBitmap* bitmap, int width, int height,
19452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org                             SkColor color, skiatest::Reporter* reporter) {
208ef51b975c2bdb8fa332f091863e5410c18576c7commit-bot@chromium.org    SkImageInfo info = SkImageInfo::MakeN32(width, height, kOpaque_SkAlphaType);
218ef51b975c2bdb8fa332f091863e5410c18576c7commit-bot@chromium.org    REPORTER_ASSERT(reporter, bitmap->allocPixels(info));
228ef51b975c2bdb8fa332f091863e5410c18576c7commit-bot@chromium.org    bitmap->eraseColor(color);
23452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org}
24908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.com
25452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.orgDEF_TEST(BitmapHasher, reporter) {
26452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org    // Test SkBitmapHasher
27452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org    SkBitmap bitmap;
28452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org    uint64_t digest;
29452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org    // initial test case
308ef51b975c2bdb8fa332f091863e5410c18576c7commit-bot@chromium.org    CreateTestBitmap(&bitmap, 333, 555, SK_ColorBLUE, reporter);
31452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org    REPORTER_ASSERT(reporter, SkBitmapHasher::ComputeDigest(bitmap, &digest));
32452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org    REPORTER_ASSERT(reporter, digest == 0xfb2903562766ef87ULL);
33452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org    // same pixel data but different dimensions should yield a different checksum
348ef51b975c2bdb8fa332f091863e5410c18576c7commit-bot@chromium.org    CreateTestBitmap(&bitmap, 555, 333, SK_ColorBLUE, reporter);
35452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org    REPORTER_ASSERT(reporter, SkBitmapHasher::ComputeDigest(bitmap, &digest));
36452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org    REPORTER_ASSERT(reporter, digest == 0xfe04023fb97d0f61ULL);
37452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org    // same dimensions but different color should yield a different checksum
388ef51b975c2bdb8fa332f091863e5410c18576c7commit-bot@chromium.org    CreateTestBitmap(&bitmap, 555, 333, SK_ColorGREEN, reporter);
39452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org    REPORTER_ASSERT(reporter, SkBitmapHasher::ComputeDigest(bitmap, &digest));
40452eecb4436f27e057d4d2df26e3a70020a817b6tfarina@chromium.org    REPORTER_ASSERT(reporter, digest == 0x2423c51cad6d1edcULL);
41908f5836626d792c5e33ad93f44c6a418a0cc8f5epoger@google.com}
42