1*6777b538SAndroid Build Coastguard Worker // Copyright 2019 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/metrics/crc32.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker #include "base/containers/span.h" 10*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h" 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker namespace base { 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Worker // Table was generated similarly to sample code for CRC-32 given on: 15*6777b538SAndroid Build Coastguard Worker // http://www.w3.org/TR/PNG/#D-CRCAppendix. TEST(Crc32Test,TableTest)16*6777b538SAndroid Build Coastguard WorkerTEST(Crc32Test, TableTest) { 17*6777b538SAndroid Build Coastguard Worker for (int i = 0; i < 256; ++i) { 18*6777b538SAndroid Build Coastguard Worker uint32_t checksum = i; 19*6777b538SAndroid Build Coastguard Worker for (int j = 0; j < 8; ++j) { 20*6777b538SAndroid Build Coastguard Worker const uint32_t kReversedPolynomial = 0xEDB88320L; 21*6777b538SAndroid Build Coastguard Worker if (checksum & 1) 22*6777b538SAndroid Build Coastguard Worker checksum = kReversedPolynomial ^ (checksum >> 1); 23*6777b538SAndroid Build Coastguard Worker else 24*6777b538SAndroid Build Coastguard Worker checksum >>= 1; 25*6777b538SAndroid Build Coastguard Worker } 26*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(kCrcTable[i], checksum); 27*6777b538SAndroid Build Coastguard Worker } 28*6777b538SAndroid Build Coastguard Worker } 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker // A CRC of nothing should always be zero. TEST(Crc32Test,ZeroTest)31*6777b538SAndroid Build Coastguard WorkerTEST(Crc32Test, ZeroTest) { 32*6777b538SAndroid Build Coastguard Worker span<const uint8_t> empty_data; 33*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(0U, Crc32(0, empty_data)); 34*6777b538SAndroid Build Coastguard Worker } 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker } // namespace base 37