1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
8 #include "testing/gtest/include/gtest/gtest.h"
10 namespace relocation_packer
{
12 TEST(Leb128
, Encoder
) {
13 std::vector
<ELF::Xword
> values
;
14 values
.push_back(624485);
17 values
.push_back(127);
18 values
.push_back(128);
20 Leb128Encoder encoder
;
21 encoder
.EnqueueAll(values
);
23 encoder
.Enqueue(4294967295);
24 encoder
.Enqueue(18446744073709551615ul);
26 std::vector
<uint8_t> encoding
;
27 encoder
.GetEncoding(&encoding
);
29 EXPECT_EQ(23, encoding
.size());
31 EXPECT_EQ(0xe5, encoding
[0]);
32 EXPECT_EQ(0x8e, encoding
[1]);
33 EXPECT_EQ(0x26, encoding
[2]);
35 EXPECT_EQ(0x00, encoding
[3]);
37 EXPECT_EQ(0x01, encoding
[4]);
39 EXPECT_EQ(0x7f, encoding
[5]);
41 EXPECT_EQ(0x80, encoding
[6]);
42 EXPECT_EQ(0x01, encoding
[7]);
44 EXPECT_EQ(0xff, encoding
[8]);
45 EXPECT_EQ(0xff, encoding
[9]);
46 EXPECT_EQ(0xff, encoding
[10]);
47 EXPECT_EQ(0xff, encoding
[11]);
48 EXPECT_EQ(0x0f, encoding
[12]);
49 // 18446744073709551615
50 EXPECT_EQ(0xff, encoding
[13]);
51 EXPECT_EQ(0xff, encoding
[14]);
52 EXPECT_EQ(0xff, encoding
[15]);
53 EXPECT_EQ(0xff, encoding
[16]);
54 EXPECT_EQ(0xff, encoding
[17]);
55 EXPECT_EQ(0xff, encoding
[18]);
56 EXPECT_EQ(0xff, encoding
[19]);
57 EXPECT_EQ(0xff, encoding
[20]);
58 EXPECT_EQ(0xff, encoding
[21]);
59 EXPECT_EQ(0x01, encoding
[22]);
62 TEST(Leb128
, Decoder
) {
63 std::vector
<uint8_t> encoding
;
65 encoding
.push_back(0xe5);
66 encoding
.push_back(0x8e);
67 encoding
.push_back(0x26);
69 encoding
.push_back(0x00);
71 encoding
.push_back(0x01);
73 encoding
.push_back(0x7f);
75 encoding
.push_back(0x80);
76 encoding
.push_back(0x01);
78 encoding
.push_back(0xff);
79 encoding
.push_back(0xff);
80 encoding
.push_back(0xff);
81 encoding
.push_back(0xff);
82 encoding
.push_back(0x0f);
83 // 18446744073709551615
84 encoding
.push_back(0xff);
85 encoding
.push_back(0xff);
86 encoding
.push_back(0xff);
87 encoding
.push_back(0xff);
88 encoding
.push_back(0xff);
89 encoding
.push_back(0xff);
90 encoding
.push_back(0xff);
91 encoding
.push_back(0xff);
92 encoding
.push_back(0xff);
93 encoding
.push_back(0x01);
95 Leb128Decoder
decoder(encoding
);
97 EXPECT_EQ(624485, decoder
.Dequeue());
99 std::vector
<ELF::Xword
> dequeued
;
100 decoder
.DequeueAll(&dequeued
);
102 EXPECT_EQ(6, dequeued
.size());
103 EXPECT_EQ(0, dequeued
[0]);
104 EXPECT_EQ(1, dequeued
[1]);
105 EXPECT_EQ(127, dequeued
[2]);
106 EXPECT_EQ(128, dequeued
[3]);
107 EXPECT_EQ(4294967295, dequeued
[4]);
108 EXPECT_EQ(18446744073709551615ul, dequeued
[5]);
111 } // namespace relocation_packer