1de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===- BitstreamWriterTest.cpp - Tests for BitstreamWriter ----------------===//
2de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//
3de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//                     The LLVM Compiler Infrastructure
4de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//
5de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source
6de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// License. See LICENSE.TXT for details.
7de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//
8de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===----------------------------------------------------------------------===//
9de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
10de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/ADT/STLExtras.h"
11de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/ADT/SmallString.h"
12de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/Bitcode/BitstreamWriter.h"
13de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "gtest/gtest.h"
14de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
15de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarusing namespace llvm;
16de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
17de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarnamespace {
18de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
19de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarTEST(BitstreamWriterTest, emitBlob) {
20de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  SmallString<64> Buffer;
21de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  BitstreamWriter W(Buffer);
22de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  W.emitBlob("str", /* ShouldEmitSize */ false);
23de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  EXPECT_EQ(StringRef("str\0", 4), Buffer);
24de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}
25de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
26de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarTEST(BitstreamWriterTest, emitBlobWithSize) {
27de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  SmallString<64> Buffer;
28de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  {
29de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    BitstreamWriter W(Buffer);
30de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    W.emitBlob("str");
31de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  }
32de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  SmallString<64> Expected;
33de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  {
34de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    BitstreamWriter W(Expected);
35de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    W.EmitVBR(3, 6);
36de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    W.FlushToWord();
37de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    W.Emit('s', 8);
38de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    W.Emit('t', 8);
39de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    W.Emit('r', 8);
40de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    W.Emit(0, 8);
41de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  }
42de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  EXPECT_EQ(StringRef(Expected), Buffer);
43de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}
44de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
45de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarTEST(BitstreamWriterTest, emitBlobEmpty) {
46de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  SmallString<64> Buffer;
47de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  BitstreamWriter W(Buffer);
48de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  W.emitBlob("", /* ShouldEmitSize */ false);
49de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  EXPECT_EQ(StringRef(""), Buffer);
50de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}
51de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
52de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarTEST(BitstreamWriterTest, emitBlob4ByteAligned) {
53de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  SmallString<64> Buffer;
54de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  BitstreamWriter W(Buffer);
55de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  W.emitBlob("str0", /* ShouldEmitSize */ false);
56de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  EXPECT_EQ(StringRef("str0"), Buffer);
57de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}
58de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
59de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} // end namespace
60