summaryrefslogtreecommitdiff
path: root/test/std/numerics/rand/rand.eng/rand.eng.lcong/eval.pass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/std/numerics/rand/rand.eng/rand.eng.lcong/eval.pass.cpp')
-rw-r--r--test/std/numerics/rand/rand.eng/rand.eng.lcong/eval.pass.cpp87
1 files changed, 87 insertions, 0 deletions
diff --git a/test/std/numerics/rand/rand.eng/rand.eng.lcong/eval.pass.cpp b/test/std/numerics/rand/rand.eng/rand.eng.lcong/eval.pass.cpp
new file mode 100644
index 0000000000000..6d0057d598a8f
--- /dev/null
+++ b/test/std/numerics/rand/rand.eng/rand.eng.lcong/eval.pass.cpp
@@ -0,0 +1,87 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <random>
+
+// template <class UIntType, UIntType a, UIntType c, UIntType m>
+// class linear_congruential_engine;
+
+// result_type operator()();
+
+#include <random>
+#include <cassert>
+
+template <class T>
+void
+randu()
+{
+ typedef std::linear_congruential_engine<T, 65539, 0, 2147483648u> E;
+ E e(1);
+ assert(e() == 65539);
+ assert(e() == 393225);
+ assert(e() == 1769499);
+ assert(e() == 7077969);
+ assert(e() == 26542323);
+ assert(e() == 95552217);
+ assert(e() == 334432395);
+ assert(e() == 1146624417);
+ assert(e() == 1722371299);
+ assert(e() == 14608041);
+ assert(e() == 1766175739);
+ assert(e() == 1875647473);
+}
+
+template <class T>
+void
+minstd()
+{
+ typedef std::linear_congruential_engine<T, 16807, 0, 2147483647> E;
+ E e(1);
+ assert(e() == 16807);
+ assert(e() == 282475249);
+ assert(e() == 1622650073);
+ assert(e() == 984943658);
+ assert(e() == 1144108930);
+ assert(e() == 470211272);
+ assert(e() == 101027544);
+ assert(e() == 1457850878);
+ assert(e() == 1458777923);
+ assert(e() == 2007237709);
+ assert(e() == 823564440);
+ assert(e() == 1115438165);
+}
+
+template <class T>
+void
+Haldir()
+{
+ typedef std::linear_congruential_engine<T, 16807, 78125, 2147483647> E;
+ E e(207560540);
+ assert(e() == 956631177);
+ assert(e() == 2037688522);
+ assert(e() == 1509348670);
+ assert(e() == 1546336451);
+ assert(e() == 429714088);
+ assert(e() == 217250280);
+}
+
+int main()
+{
+ randu<unsigned int>();
+ randu<unsigned long>();
+ randu<unsigned long long>();
+
+ minstd<unsigned int>();
+ minstd<unsigned long>();
+ minstd<unsigned long long>();
+
+ Haldir<unsigned int>();
+ Haldir<unsigned long>();
+ Haldir<unsigned long long>();
+}