1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // <random>
11 
12 // template<class Engine, size_t w, class UIntType>
13 // class independent_bits_engine
14 // {
15 // public:
16 //     // types
17 //     typedef UIntType result_type;
18 
19 #include <random>
20 #include <type_traits>
21 
22 template <class UIntType, UIntType Min, UIntType Max>
23 class rand1
24 {
25 public:
26     // types
27     typedef UIntType result_type;
28 
29 private:
30     result_type x_;
31 
32     static_assert(Min < Max, "rand1 invalid parameters");
33 public:
34 
35 #ifdef _LIBCPP_HAS_NO_CONSTEXPR
36     // Workaround for lack of constexpr in C++03
37     static const result_type _Min = Min;
38     static const result_type _Max = Max;
39 #endif
40 
41     static _LIBCPP_CONSTEXPR result_type min() {return Min;}
42     static _LIBCPP_CONSTEXPR result_type max() {return Max;}
43 
44     explicit rand1(result_type sd = Min) : x_(sd)
45     {
46         if (x_ < Min)
47             x_ = Min;
48         if (x_ > Max)
49             x_ = Max;
50     }
51 
52     result_type operator()()
53     {
54         result_type r = x_;
55         if (x_ < Max)
56             ++x_;
57         else
58             x_ = Min;
59         return r;
60     }
61 };
62 
63 void
64 test1()
65 {
66     static_assert((std::is_same<
67         std::independent_bits_engine<rand1<unsigned long, 0, 10>, 16, unsigned>::result_type,
68         unsigned>::value), "");
69 }
70 
71 void
72 test2()
73 {
74     static_assert((std::is_same<
75         std::independent_bits_engine<rand1<unsigned long, 0, 10>, 16, unsigned long long>::result_type,
76         unsigned long long>::value), "");
77 }
78 
79 int main()
80 {
81     test1();
82     test2();
83 }
84