test_linear_congruential_engine.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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. #define BOOST_TEST_MODULE TestLinearCongruentialEngine
  11. #include <boost/test/unit_test.hpp>
  12. #include <boost/compute/random/linear_congruential_engine.hpp>
  13. #include <boost/compute/container/vector.hpp>
  14. #include "check_macros.hpp"
  15. #include "context_setup.hpp"
  16. BOOST_AUTO_TEST_CASE(generate_uint)
  17. {
  18. using boost::compute::uint_;
  19. boost::compute::linear_congruential_engine<uint_> rng(queue);
  20. boost::compute::vector<uint_> vector(10, context);
  21. rng.generate(vector.begin(), vector.end(), queue);
  22. CHECK_RANGE_EQUAL(
  23. uint_, 10, vector,
  24. (uint_(1099087573),
  25. uint_(2291457337),
  26. uint_(4026424941),
  27. uint_(420705969),
  28. uint_(2250972997),
  29. uint_(153107049),
  30. uint_(3581708125),
  31. uint_(1733142113),
  32. uint_(3008982197),
  33. uint_(3237988505))
  34. );
  35. }
  36. BOOST_AUTO_TEST_CASE(discard_uint)
  37. {
  38. using boost::compute::uint_;
  39. boost::compute::linear_congruential_engine<uint_> rng(queue);
  40. boost::compute::vector<uint_> vector(5, context);
  41. rng.discard(5, queue);
  42. rng.generate(vector.begin(), vector.end(), queue);
  43. CHECK_RANGE_EQUAL(
  44. uint_, 5, vector,
  45. (uint_(153107049),
  46. uint_(3581708125),
  47. uint_(1733142113),
  48. uint_(3008982197),
  49. uint_(3237988505))
  50. );
  51. }
  52. BOOST_AUTO_TEST_CASE(copy_ctor)
  53. {
  54. using boost::compute::uint_;
  55. boost::compute::linear_congruential_engine<uint_> rng(queue);
  56. boost::compute::linear_congruential_engine<uint_> rng_copy(rng);
  57. boost::compute::vector<uint_> vector(10, context);
  58. rng_copy.generate(vector.begin(), vector.end(), queue);
  59. CHECK_RANGE_EQUAL(
  60. uint_, 10, vector,
  61. (uint_(1099087573),
  62. uint_(2291457337),
  63. uint_(4026424941),
  64. uint_(420705969),
  65. uint_(2250972997),
  66. uint_(153107049),
  67. uint_(3581708125),
  68. uint_(1733142113),
  69. uint_(3008982197),
  70. uint_(3237988505))
  71. );
  72. }
  73. BOOST_AUTO_TEST_CASE(assign_op)
  74. {
  75. using boost::compute::uint_;
  76. boost::compute::linear_congruential_engine<uint_> rng(queue);
  77. boost::compute::linear_congruential_engine<uint_> rng_copy(queue);
  78. boost::compute::vector<uint_> vector(10, context);
  79. rng_copy.discard(5, queue);
  80. rng_copy = rng;
  81. rng_copy.generate(vector.begin(), vector.end(), queue);
  82. CHECK_RANGE_EQUAL(
  83. uint_, 10, vector,
  84. (uint_(1099087573),
  85. uint_(2291457337),
  86. uint_(4026424941),
  87. uint_(420705969),
  88. uint_(2250972997),
  89. uint_(153107049),
  90. uint_(3581708125),
  91. uint_(1733142113),
  92. uint_(3008982197),
  93. uint_(3237988505))
  94. );
  95. }
  96. BOOST_AUTO_TEST_SUITE_END()