xref: /aosp_15_r20/external/leveldb/util/crc32c_test.cc (revision 9507f98c5f32dee4b5f9e4a38cd499f3ff5c4490)
1*9507f98cSAndroid Build Coastguard Worker // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2*9507f98cSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*9507f98cSAndroid Build Coastguard Worker // found in the LICENSE file. See the AUTHORS file for names of contributors.
4*9507f98cSAndroid Build Coastguard Worker 
5*9507f98cSAndroid Build Coastguard Worker #include "util/crc32c.h"
6*9507f98cSAndroid Build Coastguard Worker 
7*9507f98cSAndroid Build Coastguard Worker #include "gtest/gtest.h"
8*9507f98cSAndroid Build Coastguard Worker 
9*9507f98cSAndroid Build Coastguard Worker namespace leveldb {
10*9507f98cSAndroid Build Coastguard Worker namespace crc32c {
11*9507f98cSAndroid Build Coastguard Worker 
TEST(CRC,StandardResults)12*9507f98cSAndroid Build Coastguard Worker TEST(CRC, StandardResults) {
13*9507f98cSAndroid Build Coastguard Worker   // From rfc3720 section B.4.
14*9507f98cSAndroid Build Coastguard Worker   char buf[32];
15*9507f98cSAndroid Build Coastguard Worker 
16*9507f98cSAndroid Build Coastguard Worker   memset(buf, 0, sizeof(buf));
17*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(0x8a9136aa, Value(buf, sizeof(buf)));
18*9507f98cSAndroid Build Coastguard Worker 
19*9507f98cSAndroid Build Coastguard Worker   memset(buf, 0xff, sizeof(buf));
20*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(0x62a8ab43, Value(buf, sizeof(buf)));
21*9507f98cSAndroid Build Coastguard Worker 
22*9507f98cSAndroid Build Coastguard Worker   for (int i = 0; i < 32; i++) {
23*9507f98cSAndroid Build Coastguard Worker     buf[i] = i;
24*9507f98cSAndroid Build Coastguard Worker   }
25*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(0x46dd794e, Value(buf, sizeof(buf)));
26*9507f98cSAndroid Build Coastguard Worker 
27*9507f98cSAndroid Build Coastguard Worker   for (int i = 0; i < 32; i++) {
28*9507f98cSAndroid Build Coastguard Worker     buf[i] = 31 - i;
29*9507f98cSAndroid Build Coastguard Worker   }
30*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(0x113fdb5c, Value(buf, sizeof(buf)));
31*9507f98cSAndroid Build Coastguard Worker 
32*9507f98cSAndroid Build Coastguard Worker   uint8_t data[48] = {
33*9507f98cSAndroid Build Coastguard Worker       0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34*9507f98cSAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
35*9507f98cSAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x18, 0x28, 0x00, 0x00, 0x00,
36*9507f98cSAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37*9507f98cSAndroid Build Coastguard Worker   };
38*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(0xd9963a56, Value(reinterpret_cast<char*>(data), sizeof(data)));
39*9507f98cSAndroid Build Coastguard Worker }
40*9507f98cSAndroid Build Coastguard Worker 
TEST(CRC,Values)41*9507f98cSAndroid Build Coastguard Worker TEST(CRC, Values) { ASSERT_NE(Value("a", 1), Value("foo", 3)); }
42*9507f98cSAndroid Build Coastguard Worker 
TEST(CRC,Extend)43*9507f98cSAndroid Build Coastguard Worker TEST(CRC, Extend) {
44*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(Value("hello world", 11), Extend(Value("hello ", 6), "world", 5));
45*9507f98cSAndroid Build Coastguard Worker }
46*9507f98cSAndroid Build Coastguard Worker 
TEST(CRC,Mask)47*9507f98cSAndroid Build Coastguard Worker TEST(CRC, Mask) {
48*9507f98cSAndroid Build Coastguard Worker   uint32_t crc = Value("foo", 3);
49*9507f98cSAndroid Build Coastguard Worker   ASSERT_NE(crc, Mask(crc));
50*9507f98cSAndroid Build Coastguard Worker   ASSERT_NE(crc, Mask(Mask(crc)));
51*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(crc, Unmask(Mask(crc)));
52*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(crc, Unmask(Unmask(Mask(Mask(crc)))));
53*9507f98cSAndroid Build Coastguard Worker }
54*9507f98cSAndroid Build Coastguard Worker 
55*9507f98cSAndroid Build Coastguard Worker }  // namespace crc32c
56*9507f98cSAndroid Build Coastguard Worker }  // namespace leveldb
57*9507f98cSAndroid Build Coastguard Worker 
58