• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //---------------------------------------------------------------------------//
2 // Copyright (c) 2014 Roshan <thisisroshansmail@gmail.com>
3 //
4 // Distributed under the Boost Software License, Version 1.0
5 // See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt
7 //
8 // See http://boostorg.github.com/compute for more information.
9 //---------------------------------------------------------------------------//
10 
11 #define BOOST_TEST_MODULE TestLinearCongruentialEngine
12 #include <boost/test/unit_test.hpp>
13 
14 #include <boost/compute/random/linear_congruential_engine.hpp>
15 #include <boost/compute/container/vector.hpp>
16 
17 #include "check_macros.hpp"
18 #include "context_setup.hpp"
19 
BOOST_AUTO_TEST_CASE(generate_uint)20 BOOST_AUTO_TEST_CASE(generate_uint)
21 {
22     using boost::compute::uint_;
23 
24     boost::compute::linear_congruential_engine<uint_> rng(queue);
25 
26     boost::compute::vector<uint_> vector(10, context);
27 
28     rng.generate(vector.begin(), vector.end(), queue);
29 
30     CHECK_RANGE_EQUAL(
31         uint_, 10, vector,
32         (uint_(1099087573),
33          uint_(2291457337),
34          uint_(4026424941),
35          uint_(420705969),
36          uint_(2250972997),
37          uint_(153107049),
38          uint_(3581708125),
39          uint_(1733142113),
40          uint_(3008982197),
41          uint_(3237988505))
42     );
43 }
44 
BOOST_AUTO_TEST_CASE(discard_uint)45 BOOST_AUTO_TEST_CASE(discard_uint)
46 {
47     using boost::compute::uint_;
48 
49     boost::compute::linear_congruential_engine<uint_> rng(queue);
50 
51     boost::compute::vector<uint_> vector(5, context);
52 
53     rng.discard(5, queue);
54     rng.generate(vector.begin(), vector.end(), queue);
55 
56     CHECK_RANGE_EQUAL(
57         uint_, 5, vector,
58         (uint_(153107049),
59          uint_(3581708125),
60          uint_(1733142113),
61          uint_(3008982197),
62          uint_(3237988505))
63     );
64 }
65 
BOOST_AUTO_TEST_CASE(copy_ctor)66 BOOST_AUTO_TEST_CASE(copy_ctor)
67 {
68     using boost::compute::uint_;
69 
70     boost::compute::linear_congruential_engine<uint_> rng(queue);
71     boost::compute::linear_congruential_engine<uint_> rng_copy(rng);
72 
73     boost::compute::vector<uint_> vector(10, context);
74 
75     rng_copy.generate(vector.begin(), vector.end(), queue);
76 
77     CHECK_RANGE_EQUAL(
78         uint_, 10, vector,
79         (uint_(1099087573),
80          uint_(2291457337),
81          uint_(4026424941),
82          uint_(420705969),
83          uint_(2250972997),
84          uint_(153107049),
85          uint_(3581708125),
86          uint_(1733142113),
87          uint_(3008982197),
88          uint_(3237988505))
89     );
90 }
91 
BOOST_AUTO_TEST_CASE(assign_op)92 BOOST_AUTO_TEST_CASE(assign_op)
93 {
94     using boost::compute::uint_;
95 
96     boost::compute::linear_congruential_engine<uint_> rng(queue);
97     boost::compute::linear_congruential_engine<uint_> rng_copy(queue);
98 
99     boost::compute::vector<uint_> vector(10, context);
100 
101     rng_copy.discard(5, queue);
102     rng_copy = rng;
103     rng_copy.generate(vector.begin(), vector.end(), queue);
104 
105     CHECK_RANGE_EQUAL(
106         uint_, 10, vector,
107         (uint_(1099087573),
108          uint_(2291457337),
109          uint_(4026424941),
110          uint_(420705969),
111          uint_(2250972997),
112          uint_(153107049),
113          uint_(3581708125),
114          uint_(1733142113),
115          uint_(3008982197),
116          uint_(3237988505))
117     );
118 }
119 
120 BOOST_AUTO_TEST_SUITE_END()
121