Home | History | Annotate | Download | only in src
      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.
      4 
      5 #include "leb128.h"
      6 
      7 #include <vector>
      8 #include "testing/gtest/include/gtest/gtest.h"
      9 
     10 namespace relocation_packer {
     11 
     12 TEST(Leb128, Encoder) {
     13   std::vector<ELF::Xword> values;
     14   values.push_back(624485);
     15   values.push_back(0);
     16   values.push_back(1);
     17   values.push_back(127);
     18   values.push_back(128);
     19 
     20   Leb128Encoder encoder;
     21   encoder.EnqueueAll(values);
     22 
     23   encoder.Enqueue(4294967295);
     24   encoder.Enqueue(18446744073709551615ul);
     25 
     26   std::vector<uint8_t> encoding;
     27   encoder.GetEncoding(&encoding);
     28 
     29   EXPECT_EQ(23, encoding.size());
     30   // 624485
     31   EXPECT_EQ(0xe5, encoding[0]);
     32   EXPECT_EQ(0x8e, encoding[1]);
     33   EXPECT_EQ(0x26, encoding[2]);
     34   // 0
     35   EXPECT_EQ(0x00, encoding[3]);
     36   // 1
     37   EXPECT_EQ(0x01, encoding[4]);
     38   // 127
     39   EXPECT_EQ(0x7f, encoding[5]);
     40   // 128
     41   EXPECT_EQ(0x80, encoding[6]);
     42   EXPECT_EQ(0x01, encoding[7]);
     43   // 4294967295
     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]);
     60 }
     61 
     62 TEST(Leb128, Decoder) {
     63   std::vector<uint8_t> encoding;
     64   // 624485
     65   encoding.push_back(0xe5);
     66   encoding.push_back(0x8e);
     67   encoding.push_back(0x26);
     68   // 0
     69   encoding.push_back(0x00);
     70   // 1
     71   encoding.push_back(0x01);
     72   // 127
     73   encoding.push_back(0x7f);
     74   // 128
     75   encoding.push_back(0x80);
     76   encoding.push_back(0x01);
     77   // 4294967295
     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);
     94 
     95   Leb128Decoder decoder(encoding);
     96 
     97   EXPECT_EQ(624485, decoder.Dequeue());
     98 
     99   std::vector<ELF::Xword> dequeued;
    100   decoder.DequeueAll(&dequeued);
    101 
    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]);
    109 }
    110 
    111 }  // namespace relocation_packer
    112