/* * Copyright 2016 Intel Corporation * * Licensed 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. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif // primary header #include "bitReader.h" // library headers #include "common/unittest.h" // system libraries #include #include namespace YamiParser { class BitReaderTest : public ::testing::Test { protected: std::vector& largeData() const { static const uint32_t nBytes = (std::numeric_limits::max() >> 3) + 1; static std::vector data(nBytes); return data; } }; #define BITREADER_TEST(name) \ TEST_F(BitReaderTest, name) BITREADER_TEST(NoOverflow) { std::vector& data = largeData(); const uint32_t nBytes = data.size(); ASSERT_EQ(0u, nBytes % (1024 * 1024 * 512)); BitReader reader(&data[0], nBytes); EXPECT_FALSE(reader.end()); EXPECT_EQ(0u, reader.getPos()); EXPECT_EQ(static_cast(nBytes) << 3, reader.getRemainingBitsCount()); const uint32_t nReads = nBytes / BitReader::CACHEBYTES; const uint32_t rem = nBytes % BitReader::CACHEBYTES; const uint32_t bitsPerRead = BitReader::CACHEBYTES << 3; for (uint32_t i(0); i < nReads; ++i) reader.read(bitsPerRead); reader.read(rem << 3); EXPECT_EQ(static_cast(nBytes) << 3, reader.getPos()); EXPECT_TRUE(reader.end()); EXPECT_EQ(0u, reader.getRemainingBitsCount()); } void checkBitreadEmpty(BitReader& reader) { EXPECT_TRUE(reader.end()); EXPECT_EQ(0u, reader.getPos()); EXPECT_EQ(0u, reader.getRemainingBitsCount()); bool b; EXPECT_FALSE(reader.readT(b)); EXPECT_TRUE(reader.end()); } BITREADER_TEST(NullInit) { uint8_t data = 0; BitReader r1(&data, 0); checkBitreadEmpty(r1); BitReader r2(NULL, 0); checkBitreadEmpty(r2); EXPECT_DEATH(BitReader r3(NULL, 1), ""); } } // namespace YamiParser