1 //===----------------------------------------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
11 // template <class UIntType, UIntType a, UIntType c, UIntType m>
12 // class linear_congruential_engine;
14 // linear_congruential_engine(const linear_congruential_engine&);
20 #include "test_macros.h"
22 template <class T
, T a
, T c
, T m
>
26 typedef std::linear_congruential_engine
<T
, a
, c
, m
> E
;
39 const int W
= sizeof(T
) * CHAR_BIT
;
40 const T
M(static_cast<T
>(-1));
41 const T
A(static_cast<T
>((static_cast<T
>(1) << (W
/ 2)) - 1));
49 // Cases where m = 2^n for n < w
50 test1
<T
, 0, 0, 256>();
51 test1
<T
, 5, 0, 256>();
52 test1
<T
, 0, 1, 256>();
53 test1
<T
, 5, 1, 256>();
55 // Cases where m is odd and a = 0
57 test1
<T
, 0, M
- 2, M
>();
58 test1
<T
, 0, M
- 1, M
>();
60 // Cases where m is odd and m % a <= m / a (Schrage)
62 test1
<T
, A
, M
- 2, M
>();
63 test1
<T
, A
, M
- 1, M
>();
68 const T
M(static_cast<T
>(-1));
70 // Cases where m is odd and m % a > m / a
71 test1
<T
, M
- 2, 0, M
>();
72 test1
<T
, M
- 2, M
- 2, M
>();
73 test1
<T
, M
- 2, M
- 1, M
>();
74 test1
<T
, M
- 1, 0, M
>();
75 test1
<T
, M
- 1, M
- 2, M
>();
76 test1
<T
, M
- 1, M
- 1, M
>();
81 test
<unsigned short>();
82 test_ext
<unsigned short>();
84 test_ext
<unsigned int>();
85 test
<unsigned long>();
86 // This isn't implemented on platforms without __int128
87 #ifndef TEST_HAS_NO_INT128
88 test_ext
<unsigned long>();
90 test
<unsigned long long>();
91 // This isn't implemented on platforms without __int128
92 #ifndef TEST_HAS_NO_INT128
93 test_ext
<unsigned long long>();