// Copyright 2017 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <cstring>

#include "gtest/gtest.h"

#include "puffin/src/bit_reader.h"
#include "puffin/src/bit_writer.h"
#include "puffin/src/logging.h"
#include "puffin/src/unittest_common.h"

namespace puffin {

// Testing |BufferBitReader| and |BufferBitWriter|.
TEST(BitIOTest, BitWriterAndBitReaderTest) {
  static const size_t kSize = 5;
  uint8_t buf[kSize];

  puffin::BufferBitWriter bw(buf, kSize);
  ASSERT_TRUE(bw.WriteBits(0, 0x05));
  ASSERT_TRUE(bw.WriteBits(3, 0x05));
  ASSERT_TRUE(bw.WriteBits(8, 0xFF));
  ASSERT_TRUE(bw.WriteBoundaryBits(0x0F));
  uint8_t tmp[] = {1, 2};
  size_t index = 0;
  ASSERT_TRUE(bw.WriteBytes(2, [&tmp, &index](uint8_t* buffer, size_t count) {
    if (count > 2 - index)
      return false;
    memcpy(buffer, &tmp[index], count);
    return true;
  }));
  ASSERT_FALSE(bw.WriteBits(9, 0x1C));
  ASSERT_TRUE(bw.WriteBits(4, 0x0A));
  ASSERT_TRUE(bw.WriteBoundaryBits(0xBB));
  ASSERT_TRUE(bw.Flush());
  ASSERT_EQ(5, bw.Size());

  puffin::BufferBitReader br(buf, kSize);
  ASSERT_TRUE(br.CacheBits(11));
  ASSERT_EQ(br.ReadBits(3), 0x05);
  br.DropBits(3);
  ASSERT_EQ(br.ReadBits(8), 0xFF);
  br.DropBits(8);
  ASSERT_EQ(br.ReadBoundaryBits(), 0x0F);
  ASSERT_EQ(br.SkipBoundaryBits(), 5);
  std::function<bool(uint8_t*, size_t)> read_fn;
  ASSERT_TRUE(br.GetByteReaderFn(2, &read_fn));
  ASSERT_TRUE(read_fn(tmp, 2));
  ASSERT_EQ(br.Offset(), 4);
  ASSERT_TRUE(read_fn(tmp, 0));
  ASSERT_FALSE(read_fn(tmp, 1));
  ASSERT_FALSE(br.CacheBits(9));
  ASSERT_TRUE(br.CacheBits(8));
  ASSERT_EQ(br.ReadBits(4), 0x0A);
  br.DropBits(4);
  ASSERT_EQ(br.ReadBoundaryBits(), 0x0B);
  ASSERT_EQ(br.SkipBoundaryBits(), 4);
  ASSERT_EQ(br.ReadBoundaryBits(), 0);
  ASSERT_EQ(br.SkipBoundaryBits(), 0);
  ASSERT_FALSE(br.CacheBits(1));
}

}  // namespace puffin
