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