test_extents.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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 TestExtents
  11. #include <boost/test/unit_test.hpp>
  12. #include <algorithm>
  13. #include <vector>
  14. #include <boost/compute/utility/dim.hpp>
  15. #include <boost/compute/utility/extents.hpp>
  16. #include "context_setup.hpp"
  17. namespace compute = boost::compute;
  18. #ifndef BOOST_COMPUTE_NO_HDR_INITIALIZER_LIST
  19. BOOST_AUTO_TEST_CASE(initialize)
  20. {
  21. compute::extents<1> one(1);
  22. BOOST_CHECK_EQUAL(one[0], size_t(1));
  23. compute::extents<3> xyz = compute::dim(1, 2, 3);
  24. BOOST_CHECK_EQUAL(xyz[0], size_t(1));
  25. BOOST_CHECK_EQUAL(xyz[1], size_t(2));
  26. BOOST_CHECK_EQUAL(xyz[2], size_t(3));
  27. }
  28. #endif
  29. BOOST_AUTO_TEST_CASE(size)
  30. {
  31. BOOST_CHECK_EQUAL(compute::extents<1>().size(), size_t(1));
  32. BOOST_CHECK_EQUAL(compute::extents<2>().size(), size_t(2));
  33. BOOST_CHECK_EQUAL(compute::extents<3>().size(), size_t(3));
  34. }
  35. BOOST_AUTO_TEST_CASE(subscript_operator)
  36. {
  37. compute::extents<3> xyz;
  38. BOOST_CHECK_EQUAL(xyz[0], size_t(0));
  39. BOOST_CHECK_EQUAL(xyz[1], size_t(0));
  40. BOOST_CHECK_EQUAL(xyz[2], size_t(0));
  41. xyz[0] = size_t(10);
  42. xyz[1] = size_t(20);
  43. xyz[2] = size_t(30);
  44. BOOST_CHECK_EQUAL(xyz[0], size_t(10));
  45. BOOST_CHECK_EQUAL(xyz[1], size_t(20));
  46. BOOST_CHECK_EQUAL(xyz[2], size_t(30));
  47. }
  48. #ifndef BOOST_COMPUTE_NO_HDR_INITIALIZER_LIST
  49. BOOST_AUTO_TEST_CASE(data)
  50. {
  51. compute::extents<3> xyz = compute::dim(5, 6, 7);
  52. BOOST_CHECK_EQUAL(xyz.data()[0], size_t(5));
  53. BOOST_CHECK_EQUAL(xyz.data()[1], size_t(6));
  54. BOOST_CHECK_EQUAL(xyz.data()[2], size_t(7));
  55. }
  56. BOOST_AUTO_TEST_CASE(linear)
  57. {
  58. compute::extents<2> uv = compute::dim(16, 16);
  59. BOOST_CHECK_EQUAL(uv.linear(), size_t(256));
  60. }
  61. BOOST_AUTO_TEST_CASE(equality_operator)
  62. {
  63. BOOST_CHECK(compute::dim(10, 20) == compute::dim(10, 20));
  64. BOOST_CHECK(compute::dim(20, 10) != compute::dim(10, 20));
  65. }
  66. BOOST_AUTO_TEST_CASE(empty_dim)
  67. {
  68. BOOST_CHECK(compute::dim<0>() == compute::dim());
  69. BOOST_CHECK(compute::dim<1>() == compute::dim(0));
  70. BOOST_CHECK(compute::dim<2>() == compute::dim(0, 0));
  71. BOOST_CHECK(compute::dim<3>() == compute::dim(0, 0, 0));
  72. }
  73. BOOST_AUTO_TEST_CASE(copy_to_vector)
  74. {
  75. compute::extents<3> exts = compute::dim(4, 5, 6);
  76. std::vector<size_t> vec(3);
  77. std::copy(exts.begin(), exts.end(), vec.begin());
  78. BOOST_CHECK_EQUAL(vec[0], size_t(4));
  79. BOOST_CHECK_EQUAL(vec[1], size_t(5));
  80. BOOST_CHECK_EQUAL(vec[2], size_t(6));
  81. }
  82. #endif
  83. BOOST_AUTO_TEST_SUITE_END()