123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- //===- unittests/IR/ModuleTest.cpp - Module unit tests --------------------===//
- //
- // 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/IR/Module.h"
- #include "llvm/IR/GlobalVariable.h"
- #include "llvm/Pass.h"
- #include "llvm/Support/RandomNumberGenerator.h"
- #include "gtest/gtest.h"
- #include <random>
- using namespace llvm;
- namespace {
- bool sortByName(const GlobalVariable &L, const GlobalVariable &R) {
- return L.getName() < R.getName();
- }
- bool sortByNameReverse(const GlobalVariable &L, const GlobalVariable &R) {
- return sortByName(R, L);
- }
- TEST(ModuleTest, sortGlobalsByName) {
- LLVMContext Context;
- for (auto compare : {&sortByName, &sortByNameReverse}) {
- Module M("M", Context);
- Type *T = Type::getInt8Ty(Context);
- GlobalValue::LinkageTypes L = GlobalValue::ExternalLinkage;
- (void)new GlobalVariable(M, T, false, L, nullptr, "A");
- (void)new GlobalVariable(M, T, false, L, nullptr, "F");
- (void)new GlobalVariable(M, T, false, L, nullptr, "G");
- (void)new GlobalVariable(M, T, false, L, nullptr, "E");
- (void)new GlobalVariable(M, T, false, L, nullptr, "B");
- (void)new GlobalVariable(M, T, false, L, nullptr, "H");
- (void)new GlobalVariable(M, T, false, L, nullptr, "C");
- (void)new GlobalVariable(M, T, false, L, nullptr, "D");
- // Sort the globals by name.
- EXPECT_FALSE(std::is_sorted(M.global_begin(), M.global_end(), compare));
- M.getGlobalList().sort(compare);
- EXPECT_TRUE(std::is_sorted(M.global_begin(), M.global_end(), compare));
- }
- }
- TEST(ModuleTest, randomNumberGenerator) {
- LLVMContext Context;
- static char ID;
- struct DummyPass : ModulePass {
- DummyPass() : ModulePass(ID) {}
- bool runOnModule(Module &) { return true; }
- } DP;
- Module M("R", Context);
- std::uniform_int_distribution<int> dist;
- const size_t NBCheck = 10;
- std::array<int, NBCheck> RandomStreams[2];
- for (auto &RandomStream : RandomStreams) {
- std::unique_ptr<RandomNumberGenerator> RNG = M.createRNG(&DP);
- std::generate(RandomStream.begin(), RandomStream.end(),
- [&]() { return dist(*RNG); });
- }
- EXPECT_TRUE(std::equal(RandomStreams[0].begin(), RandomStreams[0].end(),
- RandomStreams[1].begin()));
- }
- } // end namespace
|