#include "StarByteArray.hpp"
#include "StarEncode.hpp"

#include "gtest/gtest.h"

using namespace Star;

TEST(ByteArrayTest, All) {
  auto res = ByteArray::fromCString("foobar");
  res.insert(2, 'a');
  res.insert(6, 'b');
  res.push_back('c');
  res.insert(9, 'd');
  EXPECT_EQ(res, ByteArray::fromCString("foaobabrcd"));

  auto a = hexDecode("0a0a0a");
  auto b = hexDecode("a0a0a0");
  auto c = hexDecode("818181");
  auto d = hexDecode("aaaaaa");
  auto e = hexDecode("000000");
  auto f = hexDecode("212121");

  auto g = hexDecode("a0a0a0");
  auto h = hexDecode("8181818181");
  auto i = hexDecode("2121218181");

  EXPECT_EQ(a.andWith(b), e);
  EXPECT_EQ(a.orWith(b), d);
  EXPECT_EQ(b.xorWith(c), f);
  EXPECT_EQ(g.xorWith(h), f);
  EXPECT_EQ(g.xorWith(h, true), i);
  EXPECT_EQ(h.xorWith(g, true), i);
}