test_discard_iterator.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. //---------------------------------------------------------------------------//
  2. // Copyright (c) 2013-2014 Kyle Lutz <kyle.r.lutz@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 TestDiscardIterator
  11. #include <boost/test/unit_test.hpp>
  12. #include <iterator>
  13. #include <boost/type_traits.hpp>
  14. #include <boost/static_assert.hpp>
  15. #include <boost/compute/algorithm/copy.hpp>
  16. #include <boost/compute/algorithm/copy_if.hpp>
  17. #include <boost/compute/algorithm/fill.hpp>
  18. #include <boost/compute/lambda.hpp>
  19. #include <boost/compute/container/vector.hpp>
  20. #include <boost/compute/iterator/discard_iterator.hpp>
  21. #include "check_macros.hpp"
  22. #include "context_setup.hpp"
  23. BOOST_AUTO_TEST_CASE(value_type)
  24. {
  25. BOOST_STATIC_ASSERT((
  26. boost::is_same<
  27. boost::compute::discard_iterator::value_type, void
  28. >::value
  29. ));
  30. }
  31. BOOST_AUTO_TEST_CASE(distance)
  32. {
  33. BOOST_CHECK_EQUAL(
  34. std::distance(
  35. boost::compute::make_discard_iterator(0),
  36. boost::compute::make_discard_iterator(10)
  37. ),
  38. std::ptrdiff_t(10)
  39. );
  40. BOOST_CHECK_EQUAL(
  41. std::distance(
  42. boost::compute::make_discard_iterator(5),
  43. boost::compute::make_discard_iterator(10)
  44. ),
  45. std::ptrdiff_t(5)
  46. );
  47. }
  48. BOOST_AUTO_TEST_CASE(discard_copy)
  49. {
  50. boost::compute::vector<int> vector(10, context);
  51. boost::compute::fill(vector.begin(), vector.end(), 42, queue);
  52. boost::compute::copy(
  53. vector.begin(), vector.end(),
  54. boost::compute::make_discard_iterator(),
  55. queue
  56. );
  57. }
  58. BOOST_AUTO_TEST_CASE(discard_copy_if)
  59. {
  60. int data[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
  61. boost::compute::vector<int> vector(data, data + 8, queue);
  62. using boost::compute::lambda::_1;
  63. boost::compute::discard_iterator end = boost::compute::copy_if(
  64. vector.begin(), vector.end(),
  65. boost::compute::make_discard_iterator(),
  66. _1 > 4,
  67. queue
  68. );
  69. BOOST_CHECK(std::distance(boost::compute::discard_iterator(), end) == 4);
  70. }
  71. BOOST_AUTO_TEST_CASE(discard_fill)
  72. {
  73. boost::compute::fill(
  74. boost::compute::make_discard_iterator(0),
  75. boost::compute::make_discard_iterator(100),
  76. 42,
  77. queue
  78. );
  79. }
  80. BOOST_AUTO_TEST_SUITE_END()