1e0308279SFrancis Visoiu Mistrih //===- BitstreamWriterTest.cpp - Tests for BitstreamWriter ----------------===//
2e0308279SFrancis Visoiu Mistrih //
3e0308279SFrancis Visoiu Mistrih // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e0308279SFrancis Visoiu Mistrih // See https://llvm.org/LICENSE.txt for license information.
5e0308279SFrancis Visoiu Mistrih // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e0308279SFrancis Visoiu Mistrih //
7e0308279SFrancis Visoiu Mistrih //===----------------------------------------------------------------------===//
8e0308279SFrancis Visoiu Mistrih
9e0308279SFrancis Visoiu Mistrih #include "llvm/Bitstream/BitstreamWriter.h"
10e0308279SFrancis Visoiu Mistrih #include "llvm/ADT/STLExtras.h"
11e0308279SFrancis Visoiu Mistrih #include "llvm/ADT/SmallString.h"
12e0308279SFrancis Visoiu Mistrih #include "gtest/gtest.h"
13e0308279SFrancis Visoiu Mistrih
14e0308279SFrancis Visoiu Mistrih using namespace llvm;
15e0308279SFrancis Visoiu Mistrih
16e0308279SFrancis Visoiu Mistrih namespace {
17e0308279SFrancis Visoiu Mistrih
TEST(BitstreamWriterTest,emitBlob)18e0308279SFrancis Visoiu Mistrih TEST(BitstreamWriterTest, emitBlob) {
19e0308279SFrancis Visoiu Mistrih SmallString<64> Buffer;
20e0308279SFrancis Visoiu Mistrih BitstreamWriter W(Buffer);
21e0308279SFrancis Visoiu Mistrih W.emitBlob("str", /* ShouldEmitSize */ false);
22e0308279SFrancis Visoiu Mistrih EXPECT_EQ(StringRef("str\0", 4), Buffer);
23e0308279SFrancis Visoiu Mistrih }
24e0308279SFrancis Visoiu Mistrih
TEST(BitstreamWriterTest,emitBlobWithSize)25e0308279SFrancis Visoiu Mistrih TEST(BitstreamWriterTest, emitBlobWithSize) {
26e0308279SFrancis Visoiu Mistrih SmallString<64> Buffer;
27e0308279SFrancis Visoiu Mistrih {
28e0308279SFrancis Visoiu Mistrih BitstreamWriter W(Buffer);
29e0308279SFrancis Visoiu Mistrih W.emitBlob("str");
30e0308279SFrancis Visoiu Mistrih }
31e0308279SFrancis Visoiu Mistrih SmallString<64> Expected;
32e0308279SFrancis Visoiu Mistrih {
33e0308279SFrancis Visoiu Mistrih BitstreamWriter W(Expected);
34e0308279SFrancis Visoiu Mistrih W.EmitVBR(3, 6);
35e0308279SFrancis Visoiu Mistrih W.FlushToWord();
36e0308279SFrancis Visoiu Mistrih W.Emit('s', 8);
37e0308279SFrancis Visoiu Mistrih W.Emit('t', 8);
38e0308279SFrancis Visoiu Mistrih W.Emit('r', 8);
39e0308279SFrancis Visoiu Mistrih W.Emit(0, 8);
40e0308279SFrancis Visoiu Mistrih }
41*1def2579SDavid Blaikie EXPECT_EQ(Expected.str(), Buffer);
42e0308279SFrancis Visoiu Mistrih }
43e0308279SFrancis Visoiu Mistrih
TEST(BitstreamWriterTest,emitBlobEmpty)44e0308279SFrancis Visoiu Mistrih TEST(BitstreamWriterTest, emitBlobEmpty) {
45e0308279SFrancis Visoiu Mistrih SmallString<64> Buffer;
46e0308279SFrancis Visoiu Mistrih BitstreamWriter W(Buffer);
47e0308279SFrancis Visoiu Mistrih W.emitBlob("", /* ShouldEmitSize */ false);
48e0308279SFrancis Visoiu Mistrih EXPECT_EQ(StringRef(""), Buffer);
49e0308279SFrancis Visoiu Mistrih }
50e0308279SFrancis Visoiu Mistrih
TEST(BitstreamWriterTest,emitBlob4ByteAligned)51e0308279SFrancis Visoiu Mistrih TEST(BitstreamWriterTest, emitBlob4ByteAligned) {
52e0308279SFrancis Visoiu Mistrih SmallString<64> Buffer;
53e0308279SFrancis Visoiu Mistrih BitstreamWriter W(Buffer);
54e0308279SFrancis Visoiu Mistrih W.emitBlob("str0", /* ShouldEmitSize */ false);
55e0308279SFrancis Visoiu Mistrih EXPECT_EQ(StringRef("str0"), Buffer);
56e0308279SFrancis Visoiu Mistrih }
57e0308279SFrancis Visoiu Mistrih
58e0308279SFrancis Visoiu Mistrih } // end namespace
59