Blame codecparsers/bitReader_unittest.cpp

Packit 1244b8
/*
Packit 1244b8
 * Copyright 2016 Intel Corporation
Packit 1244b8
 *
Packit 1244b8
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit 1244b8
 * you may not use this file except in compliance with the License.
Packit 1244b8
 * You may obtain a copy of the License at
Packit 1244b8
 *
Packit 1244b8
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit 1244b8
 *
Packit 1244b8
 * Unless required by applicable law or agreed to in writing, software
Packit 1244b8
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 1244b8
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 1244b8
 * See the License for the specific language governing permissions and
Packit 1244b8
 * limitations under the License.
Packit 1244b8
 */
Packit 1244b8
Packit 1244b8
#ifdef HAVE_CONFIG_H
Packit 1244b8
#include "config.h"
Packit 1244b8
#endif
Packit 1244b8
Packit 1244b8
// primary header
Packit 1244b8
#include "bitReader.h"
Packit 1244b8
Packit 1244b8
// library headers
Packit 1244b8
#include "common/unittest.h"
Packit 1244b8
Packit 1244b8
// system libraries
Packit 1244b8
#include <limits>
Packit 1244b8
#include <vector>
Packit 1244b8
Packit 1244b8
namespace YamiParser {
Packit 1244b8
Packit 1244b8
class BitReaderTest
Packit 1244b8
    : public ::testing::Test
Packit 1244b8
{
Packit 1244b8
protected:
Packit 1244b8
    std::vector<uint8_t>& largeData() const
Packit 1244b8
    {
Packit 1244b8
        static const uint32_t nBytes =
Packit 1244b8
            (std::numeric_limits<uint32_t>::max() >> 3) + 1;
Packit 1244b8
        static std::vector<uint8_t> data(nBytes);
Packit 1244b8
Packit 1244b8
        return data;
Packit 1244b8
    }
Packit 1244b8
};
Packit 1244b8
Packit 1244b8
#define BITREADER_TEST(name) \
Packit 1244b8
    TEST_F(BitReaderTest, name)
Packit 1244b8
Packit 1244b8
BITREADER_TEST(NoOverflow)
Packit 1244b8
{
Packit 1244b8
    std::vector<uint8_t>& data = largeData();
Packit 1244b8
    const uint32_t nBytes = data.size();
Packit 1244b8
Packit 1244b8
    ASSERT_EQ(0u, nBytes % (1024 * 1024 * 512));
Packit 1244b8
Packit 1244b8
    BitReader reader(&data[0], nBytes);
Packit 1244b8
Packit 1244b8
    EXPECT_FALSE(reader.end());
Packit 1244b8
    EXPECT_EQ(0u, reader.getPos());
Packit 1244b8
    EXPECT_EQ(static_cast<uint64_t>(nBytes) << 3,
Packit 1244b8
        reader.getRemainingBitsCount());
Packit 1244b8
Packit 1244b8
    const uint32_t nReads = nBytes / BitReader::CACHEBYTES;
Packit 1244b8
    const uint32_t rem = nBytes % BitReader::CACHEBYTES;
Packit 1244b8
    const uint32_t bitsPerRead = BitReader::CACHEBYTES << 3;
Packit 1244b8
    for (uint32_t i(0); i < nReads; ++i)
Packit 1244b8
        reader.read(bitsPerRead);
Packit 1244b8
    reader.read(rem << 3);
Packit 1244b8
Packit 1244b8
    EXPECT_EQ(static_cast<uint64_t>(nBytes) << 3, reader.getPos());
Packit 1244b8
    EXPECT_TRUE(reader.end());
Packit 1244b8
    EXPECT_EQ(0u, reader.getRemainingBitsCount());
Packit 1244b8
}
Packit 1244b8
Packit 1244b8
void checkBitreadEmpty(BitReader& reader)
Packit 1244b8
{
Packit 1244b8
    EXPECT_TRUE(reader.end());
Packit 1244b8
    EXPECT_EQ(0u, reader.getPos());
Packit 1244b8
    EXPECT_EQ(0u,
Packit 1244b8
        reader.getRemainingBitsCount());
Packit 1244b8
    bool b;
Packit 1244b8
    EXPECT_FALSE(reader.readT(b));
Packit 1244b8
    EXPECT_TRUE(reader.end());
Packit 1244b8
}
Packit 1244b8
Packit 1244b8
BITREADER_TEST(NullInit)
Packit 1244b8
{
Packit 1244b8
    uint8_t data = 0;
Packit 1244b8
    BitReader r1(&data, 0);
Packit 1244b8
    checkBitreadEmpty(r1);
Packit 1244b8
Packit 1244b8
    BitReader r2(NULL, 0);
Packit 1244b8
    checkBitreadEmpty(r2);
Packit 1244b8
Packit 1244b8
    EXPECT_DEATH(BitReader r3(NULL, 1), "");
Packit 1244b8
}
Packit 1244b8
Packit 1244b8
} // namespace YamiParser