diff options
| author | Mehdi Amini <mehdi.amini@apple.com> | 2016-10-11 07:13:01 +0000 |
|---|---|---|
| committer | Mehdi Amini <mehdi.amini@apple.com> | 2016-10-11 07:13:01 +0000 |
| commit | ea8e9795a55970053e699ee58c91f481bbe20151 (patch) | |
| tree | 05319e5bdf1dff98b2b8cd083daa1e2b33f4a598 /llvm/unittests | |
| parent | 96bbd2394da3f97cf48c7a2bffd4e39f722e6b0e (diff) | |
| download | bcm5719-llvm-ea8e9795a55970053e699ee58c91f481bbe20151.tar.gz bcm5719-llvm-ea8e9795a55970053e699ee58c91f481bbe20151.zip | |
Make RandomNumberGenerator compatible with <random>
LLVM's RandomNumberGenerator wasn't compatible with
the random distribution from <random>.
Fixes PR25105
Patch by: Serge Guelton <serge.guelton@telecom-bretagne.eu>
Differential Revision: https://reviews.llvm.org/D25443
llvm-svn: 283854
Diffstat (limited to 'llvm/unittests')
| -rw-r--r-- | llvm/unittests/IR/ModuleTest.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/unittests/IR/ModuleTest.cpp b/llvm/unittests/IR/ModuleTest.cpp index c5f0bcb08f3..043ea04a0c1 100644 --- a/llvm/unittests/IR/ModuleTest.cpp +++ b/llvm/unittests/IR/ModuleTest.cpp @@ -9,8 +9,11 @@ #include "llvm/IR/GlobalVariable.h" #include "llvm/IR/Module.h" +#include "llvm/Support/RandomNumberGenerator.h" #include "gtest/gtest.h" +#include <random> + using namespace llvm; namespace { @@ -45,4 +48,28 @@ TEST(ModuleTest, sortGlobalsByName) { } } +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; + constexpr std::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 |

