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