//===- ImportIDTableTests.cpp - Unit tests for ImportIDTable --------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/Transforms/IPO/FunctionImport.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include #include using namespace llvm; TEST(ImportIDTableTests, Basic) { FunctionImporter::ImportIDTable Table; auto [Def, Decl] = Table.createImportIDs("mod", 123U); auto [Def2, Decl2] = Table.createImportIDs("stuff", 456U); // Def and Decl must be of the same unsigned integer type. static_assert( std::is_unsigned_v); static_assert(std::is_same_v); static_assert(std::is_same_v); // Check that all IDs are unique. std::set IDs = {Def, Decl, Def2, Decl2}; EXPECT_THAT(IDs, ::testing::SizeIs(4)); // Verify what Def maps to. auto DefTuple = Table.lookup(Def); EXPECT_EQ(std::get<0>(DefTuple), StringRef("mod")); EXPECT_EQ(std::get<1>(DefTuple), 123U); EXPECT_EQ(std::get<2>(DefTuple), GlobalValueSummary::Definition); // Verify what Decl maps to. auto DeclTuple = Table.lookup(Decl); EXPECT_EQ(std::get<0>(DeclTuple), StringRef("mod")); EXPECT_EQ(std::get<1>(DeclTuple), 123U); EXPECT_EQ(std::get<2>(DeclTuple), GlobalValueSummary::Declaration); // Verify what Def2 maps to. auto Def2Tuple = Table.lookup(Def2); EXPECT_EQ(std::get<0>(Def2Tuple), StringRef("stuff")); EXPECT_EQ(std::get<1>(Def2Tuple), 456U); EXPECT_EQ(std::get<2>(Def2Tuple), GlobalValueSummary::Definition); // Verify what Decl2 maps to. auto Decl2Tuple = Table.lookup(Decl2); EXPECT_EQ(std::get<0>(Decl2Tuple), StringRef("stuff")); EXPECT_EQ(std::get<1>(Decl2Tuple), 456U); EXPECT_EQ(std::get<2>(Decl2Tuple), GlobalValueSummary::Declaration); } TEST(ImportIDTableTests, Duplicates) { FunctionImporter::ImportIDTable Table; auto [Def1, Decl1] = Table.createImportIDs("mod", 123U); auto [Def2, Decl2] = Table.createImportIDs("mod", 123U); // Verify we get the same IDs back. EXPECT_EQ(Def1, Def2); EXPECT_EQ(Decl1, Decl2); } TEST(ImportIDTableTests, Present) { FunctionImporter::ImportIDTable Table; auto [Def, Decl] = Table.createImportIDs("mod", 123U); auto Result = Table.getImportIDs("mod", 123U); // Verify that we get the same IDs back. ASSERT_NE(Result, std::nullopt); EXPECT_EQ(Result->first, Def); EXPECT_EQ(Result->second, Decl); } TEST(ImportIDTableTests, Missing) { FunctionImporter::ImportIDTable Table; auto Result = Table.getImportIDs("mod", 123U); // Verify that we get std::nullopt for a non-existent pair. EXPECT_EQ(Result, std::nullopt); }