annotate unittests/IR/ModuleTest.cpp @ 148:63bd29f05246

merged
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 14 Aug 2019 19:46:37 +0900
parents c2174574ed3a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
120
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
1 //===- unittests/IR/ModuleTest.cpp - Module unit tests --------------------===//
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
2 //
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
120
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
6 //
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
8
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
9 #include "llvm/IR/Module.h"
120
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
10 #include "llvm/IR/GlobalVariable.h"
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
11 #include "llvm/Support/RandomNumberGenerator.h"
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
12 #include "gtest/gtest.h"
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
13
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
14 #include <random>
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
15
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
16 using namespace llvm;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
17
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
18 namespace {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
19
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
20 bool sortByName(const GlobalVariable &L, const GlobalVariable &R) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
21 return L.getName() < R.getName();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
22 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
23
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
24 bool sortByNameReverse(const GlobalVariable &L, const GlobalVariable &R) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
25 return sortByName(R, L);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
26 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
27
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
28 TEST(ModuleTest, sortGlobalsByName) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
29 LLVMContext Context;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
30 for (auto compare : {&sortByName, &sortByNameReverse}) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
31 Module M("M", Context);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
32 Type *T = Type::getInt8Ty(Context);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
33 GlobalValue::LinkageTypes L = GlobalValue::ExternalLinkage;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
34 (void)new GlobalVariable(M, T, false, L, nullptr, "A");
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
35 (void)new GlobalVariable(M, T, false, L, nullptr, "F");
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
36 (void)new GlobalVariable(M, T, false, L, nullptr, "G");
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
37 (void)new GlobalVariable(M, T, false, L, nullptr, "E");
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
38 (void)new GlobalVariable(M, T, false, L, nullptr, "B");
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
39 (void)new GlobalVariable(M, T, false, L, nullptr, "H");
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
40 (void)new GlobalVariable(M, T, false, L, nullptr, "C");
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
41 (void)new GlobalVariable(M, T, false, L, nullptr, "D");
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
42
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
43 // Sort the globals by name.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
44 EXPECT_FALSE(std::is_sorted(M.global_begin(), M.global_end(), compare));
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
45 M.getGlobalList().sort(compare);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
46 EXPECT_TRUE(std::is_sorted(M.global_begin(), M.global_end(), compare));
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
47 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
48 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
49
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
50 TEST(ModuleTest, randomNumberGenerator) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
51 LLVMContext Context;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
52 static char ID;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
53 struct DummyPass : ModulePass {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
54 DummyPass() : ModulePass(ID) {}
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
55 bool runOnModule(Module &) { return true; }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
56 } DP;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
57
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
58 Module M("R", Context);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
59
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
60 std::uniform_int_distribution<int> dist;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
61 const size_t NBCheck = 10;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
62
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
63 std::array<int, NBCheck> RandomStreams[2];
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
64 for (auto &RandomStream : RandomStreams) {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
65 std::unique_ptr<RandomNumberGenerator> RNG = M.createRNG(&DP);
120
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
66 std::generate(RandomStream.begin(), RandomStream.end(),
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
67 [&]() { return dist(*RNG); });
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
68 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
69
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
70 EXPECT_TRUE(std::equal(RandomStreams[0].begin(), RandomStreams[0].end(),
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
71 RandomStreams[1].begin()));
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
72 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
73
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
74 } // end namespace