Currently, there are some useless includes in the codebase. We can use a tool named include-what-you-use to optimize these includes. By using a strict include-what-you-use policy, we can get lots of benefits from it.
163 lines
4.3 KiB
C++
163 lines
4.3 KiB
C++
// Licensed to the Apache Software Foundation (ASF) under one
|
|
// or more contributor license agreements. See the NOTICE file
|
|
// distributed with this work for additional information
|
|
// regarding copyright ownership. The ASF licenses this file
|
|
// to you under the Apache License, Version 2.0 (the
|
|
// "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
|
|
#include "util/coding.h"
|
|
|
|
#include <gtest/gtest-message.h>
|
|
#include <gtest/gtest-test-part.h>
|
|
|
|
#include <string>
|
|
|
|
#include "gtest/gtest_pred_impl.h"
|
|
|
|
namespace doris {
|
|
|
|
class CodingTest : public testing::Test {
|
|
public:
|
|
CodingTest() {}
|
|
virtual ~CodingTest() {}
|
|
};
|
|
|
|
TEST_F(CodingTest, fixed_le) {
|
|
uint8_t buf[64];
|
|
|
|
encode_fixed8(buf, 124);
|
|
uint8_t val8 = decode_fixed8(buf);
|
|
EXPECT_EQ(124, val8);
|
|
|
|
encode_fixed16_le(buf, 12345);
|
|
uint16_t val16 = decode_fixed16_le(buf);
|
|
EXPECT_EQ(12345, val16);
|
|
|
|
encode_fixed32_le(buf, 1234554321);
|
|
uint32_t val32 = decode_fixed32_le(buf);
|
|
EXPECT_EQ(1234554321, val32);
|
|
|
|
encode_fixed64_le(buf, 12345543211234554321UL);
|
|
uint64_t val64 = decode_fixed64_le(buf);
|
|
EXPECT_EQ(12345543211234554321UL, val64);
|
|
|
|
std::string str;
|
|
put_fixed32_le(&str, val32);
|
|
put_fixed64_le(&str, val64);
|
|
|
|
EXPECT_EQ(4 + 8, str.size());
|
|
val32 = decode_fixed32_le((const uint8_t*)str.data());
|
|
EXPECT_EQ(1234554321, val32);
|
|
|
|
encode_fixed64_le(buf, 12345543211234554321UL);
|
|
val64 = decode_fixed64_le((const uint8_t*)str.data() + 4);
|
|
EXPECT_EQ(12345543211234554321UL, val64);
|
|
}
|
|
|
|
TEST_F(CodingTest, variant) {
|
|
uint8_t buf[64];
|
|
|
|
{
|
|
uint8_t* ptr = buf;
|
|
ptr = encode_varint32(ptr, 1);
|
|
ptr = encode_varint64(ptr, 2);
|
|
EXPECT_EQ(2, ptr - buf);
|
|
}
|
|
|
|
const uint8_t* ptr = buf;
|
|
const uint8_t* limit = ptr + 64;
|
|
uint32_t val32;
|
|
ptr = decode_varint32_ptr(ptr, limit, &val32);
|
|
EXPECT_NE(nullptr, ptr);
|
|
EXPECT_EQ(1, val32);
|
|
uint64_t val64;
|
|
ptr = decode_varint64_ptr(ptr, limit, &val64);
|
|
EXPECT_NE(nullptr, ptr);
|
|
EXPECT_EQ(2, val64);
|
|
}
|
|
|
|
TEST_F(CodingTest, variant_bigvalue) {
|
|
uint8_t buf[64];
|
|
|
|
{
|
|
uint8_t* ptr = buf;
|
|
ptr = encode_varint32(ptr, 1234554321UL);
|
|
EXPECT_EQ(5, ptr - buf);
|
|
ptr = encode_varint64(ptr, 12345543211234554321UL);
|
|
EXPECT_EQ(5 + 10, ptr - buf);
|
|
}
|
|
|
|
const uint8_t* ptr = buf;
|
|
const uint8_t* limit = ptr + 64;
|
|
uint32_t val32;
|
|
ptr = decode_varint32_ptr(ptr, limit, &val32);
|
|
EXPECT_NE(nullptr, ptr);
|
|
EXPECT_EQ(1234554321UL, val32);
|
|
uint64_t val64;
|
|
ptr = decode_varint64_ptr(ptr, limit, &val64);
|
|
EXPECT_NE(nullptr, ptr);
|
|
EXPECT_EQ(12345543211234554321UL, val64);
|
|
}
|
|
|
|
TEST_F(CodingTest, variant_fail) {
|
|
uint8_t buf[64];
|
|
|
|
{
|
|
uint8_t* ptr = buf;
|
|
ptr = encode_varint32(ptr, 1234554321UL);
|
|
}
|
|
{
|
|
const uint8_t* ptr = buf;
|
|
const uint8_t* limit = ptr + 4;
|
|
uint32_t val32;
|
|
ptr = decode_varint32_ptr(ptr, limit, &val32);
|
|
EXPECT_EQ(nullptr, ptr);
|
|
}
|
|
|
|
{
|
|
uint8_t* ptr = buf;
|
|
ptr = encode_varint64(ptr, 12345543211234554321UL);
|
|
}
|
|
{
|
|
const uint8_t* ptr = buf;
|
|
const uint8_t* limit = ptr + 4;
|
|
uint64_t val64;
|
|
ptr = decode_varint64_ptr(ptr, limit, &val64);
|
|
EXPECT_EQ(nullptr, ptr);
|
|
}
|
|
}
|
|
|
|
TEST_F(CodingTest, put_varint) {
|
|
std::string val;
|
|
|
|
put_varint32(&val, 1);
|
|
put_varint64(&val, 2);
|
|
put_varint64_varint32(&val, 3, 4);
|
|
|
|
EXPECT_EQ(4, val.size());
|
|
const uint8_t* ptr = (const uint8_t*)val.data();
|
|
const uint8_t* limit = ptr + 4;
|
|
uint32_t val32;
|
|
uint64_t val64;
|
|
ptr = decode_varint32_ptr(ptr, limit, &val32);
|
|
EXPECT_EQ(1, val32);
|
|
ptr = decode_varint64_ptr(ptr, limit, &val64);
|
|
EXPECT_EQ(2, val64);
|
|
ptr = decode_varint64_ptr(ptr, limit, &val64);
|
|
EXPECT_EQ(3, val64);
|
|
ptr = decode_varint32_ptr(ptr, limit, &val32);
|
|
EXPECT_EQ(4, val32);
|
|
}
|
|
|
|
} // namespace doris
|