1*ed299b3eSPierre van Houtryve //===- GIMatchTableExecutorTest.cpp ---------------------------------------===//
2*ed299b3eSPierre van Houtryve //
3*ed299b3eSPierre van Houtryve // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*ed299b3eSPierre van Houtryve // See https://llvm.org/LICENSE.txt for license information.
5*ed299b3eSPierre van Houtryve // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*ed299b3eSPierre van Houtryve //
7*ed299b3eSPierre van Houtryve //===----------------------------------------------------------------------===//
8*ed299b3eSPierre van Houtryve
9*ed299b3eSPierre van Houtryve #include "llvm/CodeGen/GlobalISel/GIMatchTableExecutor.h"
10*ed299b3eSPierre van Houtryve #include "gtest/gtest.h"
11*ed299b3eSPierre van Houtryve
12*ed299b3eSPierre van Houtryve using namespace llvm;
13*ed299b3eSPierre van Houtryve
TEST(GlobalISelLEB128Test,fastDecodeULEB128)14*ed299b3eSPierre van Houtryve TEST(GlobalISelLEB128Test, fastDecodeULEB128) {
15*ed299b3eSPierre van Houtryve #define EXPECT_DECODE_ULEB128_EQ(EXPECTED, VALUE) \
16*ed299b3eSPierre van Houtryve do { \
17*ed299b3eSPierre van Houtryve uint64_t ActualSize = 0; \
18*ed299b3eSPierre van Houtryve uint64_t Actual = GIMatchTableExecutor::fastDecodeULEB128( \
19*ed299b3eSPierre van Houtryve reinterpret_cast<const uint8_t *>(VALUE), ActualSize); \
20*ed299b3eSPierre van Houtryve EXPECT_EQ(sizeof(VALUE) - 1, ActualSize); \
21*ed299b3eSPierre van Houtryve EXPECT_EQ(EXPECTED, Actual); \
22*ed299b3eSPierre van Houtryve } while (0)
23*ed299b3eSPierre van Houtryve
24*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0u, "\x00");
25*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(1u, "\x01");
26*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(63u, "\x3f");
27*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(64u, "\x40");
28*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0x7fu, "\x7f");
29*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0x80u, "\x80\x01");
30*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0x81u, "\x81\x01");
31*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0x90u, "\x90\x01");
32*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0xffu, "\xff\x01");
33*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0x100u, "\x80\x02");
34*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0x101u, "\x81\x02");
35*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(4294975616ULL, "\x80\xc1\x80\x80\x10");
36*ed299b3eSPierre van Houtryve
37*ed299b3eSPierre van Houtryve // Decode ULEB128 with extra padding bytes
38*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0u, "\x80\x00");
39*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0u, "\x80\x80\x00");
40*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0x7fu, "\xff\x00");
41*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0x7fu, "\xff\x80\x00");
42*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0x80u, "\x80\x81\x00");
43*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0x80u, "\x80\x81\x80\x00");
44*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0x80u, "\x80\x81\x80\x80\x80\x80\x80\x80\x80\x00");
45*ed299b3eSPierre van Houtryve EXPECT_DECODE_ULEB128_EQ(0x80000000'00000000ul,
46*ed299b3eSPierre van Houtryve "\x80\x80\x80\x80\x80\x80\x80\x80\x80\x01");
47*ed299b3eSPierre van Houtryve
48*ed299b3eSPierre van Houtryve #undef EXPECT_DECODE_ULEB128_EQ
49*ed299b3eSPierre van Houtryve }
50