brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 09e0a25 Raw
92 lines · cpp
1//===- ImportIDTableTests.cpp - Unit tests for ImportIDTable --------------===//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/Transforms/IPO/FunctionImport.h"10#include "gmock/gmock.h"11#include "gtest/gtest.h"12#include <set>13#include <type_traits>14 15using namespace llvm;16 17TEST(ImportIDTableTests, Basic) {18  FunctionImporter::ImportIDTable Table;19 20  auto [Def, Decl] = Table.createImportIDs("mod", 123U);21  auto [Def2, Decl2] = Table.createImportIDs("stuff", 456U);22 23  // Def and Decl must be of the same unsigned integer type.24  static_assert(25      std::is_unsigned_v<FunctionImporter::ImportIDTable::ImportIDTy>);26  static_assert(std::is_same_v<FunctionImporter::ImportIDTable::ImportIDTy,27                               decltype(Def)>);28  static_assert(std::is_same_v<FunctionImporter::ImportIDTable::ImportIDTy,29                               decltype(Decl)>);30 31  // Check that all IDs are unique.32  std::set<FunctionImporter::ImportIDTable::ImportIDTy> IDs = {Def, Decl, Def2,33                                                               Decl2};34  EXPECT_THAT(IDs, ::testing::SizeIs(4));35 36  // Verify what Def maps to.37  auto DefTuple = Table.lookup(Def);38  EXPECT_EQ(std::get<0>(DefTuple), StringRef("mod"));39  EXPECT_EQ(std::get<1>(DefTuple), 123U);40  EXPECT_EQ(std::get<2>(DefTuple), GlobalValueSummary::Definition);41 42  // Verify what Decl maps to.43  auto DeclTuple = Table.lookup(Decl);44  EXPECT_EQ(std::get<0>(DeclTuple), StringRef("mod"));45  EXPECT_EQ(std::get<1>(DeclTuple), 123U);46  EXPECT_EQ(std::get<2>(DeclTuple), GlobalValueSummary::Declaration);47 48  // Verify what Def2 maps to.49  auto Def2Tuple = Table.lookup(Def2);50  EXPECT_EQ(std::get<0>(Def2Tuple), StringRef("stuff"));51  EXPECT_EQ(std::get<1>(Def2Tuple), 456U);52  EXPECT_EQ(std::get<2>(Def2Tuple), GlobalValueSummary::Definition);53 54  // Verify what Decl2 maps to.55  auto Decl2Tuple = Table.lookup(Decl2);56  EXPECT_EQ(std::get<0>(Decl2Tuple), StringRef("stuff"));57  EXPECT_EQ(std::get<1>(Decl2Tuple), 456U);58  EXPECT_EQ(std::get<2>(Decl2Tuple), GlobalValueSummary::Declaration);59}60 61TEST(ImportIDTableTests, Duplicates) {62  FunctionImporter::ImportIDTable Table;63 64  auto [Def1, Decl1] = Table.createImportIDs("mod", 123U);65  auto [Def2, Decl2] = Table.createImportIDs("mod", 123U);66 67  // Verify we get the same IDs back.68  EXPECT_EQ(Def1, Def2);69  EXPECT_EQ(Decl1, Decl2);70}71 72TEST(ImportIDTableTests, Present) {73  FunctionImporter::ImportIDTable Table;74 75  auto [Def, Decl] = Table.createImportIDs("mod", 123U);76  auto Result = Table.getImportIDs("mod", 123U);77 78  // Verify that we get the same IDs back.79  ASSERT_NE(Result, std::nullopt);80  EXPECT_EQ(Result->first, Def);81  EXPECT_EQ(Result->second, Decl);82}83 84TEST(ImportIDTableTests, Missing) {85  FunctionImporter::ImportIDTable Table;86 87  auto Result = Table.getImportIDs("mod", 123U);88 89  // Verify that we get std::nullopt for a non-existent pair.90  EXPECT_EQ(Result, std::nullopt);91}92