homogeneous_color_base.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. //
  2. // Copyright 2019 Mateusz Loskot <mateusz at loskot dot net>
  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. #include <boost/gil/color_base.hpp>
  9. #include <boost/gil/gray.hpp>
  10. #include <boost/gil/rgb.hpp>
  11. #include <boost/gil/rgba.hpp>
  12. #include <boost/core/typeinfo.hpp>
  13. #include <type_traits>
  14. #define BOOST_TEST_MODULE test_channel_traits
  15. #include "unit_test.hpp"
  16. namespace gil = boost::gil;
  17. namespace {
  18. // Unknown layout is used where layout mapping is irrelevant for a test and its result.
  19. using unknown_layout_t = gil::gray_layout_t;
  20. template <int N>
  21. using color_base = gil::detail::homogeneous_color_base<std::uint8_t, unknown_layout_t, N>;
  22. std::integral_constant<int, 0> e0;
  23. std::integral_constant<int, 1> e1;
  24. std::integral_constant<int, 2> e2;
  25. std::integral_constant<int, 3> e3;
  26. std::integral_constant<int, 4> e4;
  27. } // unnamed namespace
  28. BOOST_AUTO_TEST_CASE(homogeneous_color_base_1_default_constructor)
  29. {
  30. using fixture = color_base<1>;
  31. fixture f;
  32. BOOST_TEST(std::uint8_t{f} == std::uint8_t{0});
  33. BOOST_TEST(f.at(e0) == std::uint8_t{0});
  34. }
  35. BOOST_AUTO_TEST_CASE(homogeneous_color_base_1_value_constructor)
  36. {
  37. using fixture = color_base<1>;
  38. fixture f{1};
  39. BOOST_TEST(std::uint8_t{f} == std::uint8_t{1});
  40. BOOST_TEST(f.at(e0) == std::uint8_t{1});
  41. }
  42. BOOST_AUTO_TEST_CASE(homogeneous_color_base_2_default_constructor)
  43. {
  44. using fixture = color_base<2>;
  45. fixture f;
  46. BOOST_TEST(f.at(e0) == std::uint8_t{0});
  47. BOOST_TEST(f.at(e1) == std::uint8_t{0});
  48. }
  49. BOOST_AUTO_TEST_CASE(homogeneous_color_base_2_value_constructor)
  50. {
  51. using fixture = color_base<2>;
  52. fixture f{2};
  53. BOOST_TEST(f.at(e0) == std::uint8_t{2});
  54. BOOST_TEST(f.at(e0) == f.at(e1));
  55. }
  56. BOOST_AUTO_TEST_CASE(homogeneous_color_base_3_default_constructor)
  57. {
  58. using fixture = color_base<3>;
  59. fixture f;
  60. BOOST_TEST(f.at(e0) == std::uint8_t{0});
  61. BOOST_TEST(f.at(e1) == std::uint8_t{0});
  62. BOOST_TEST(f.at(e2) == std::uint8_t{0});
  63. }
  64. BOOST_AUTO_TEST_CASE(homogeneous_color_base_3_value_constructor)
  65. {
  66. using fixture = color_base<3>;
  67. fixture f{3};
  68. BOOST_TEST(f.at(e0) == std::uint8_t{3});
  69. BOOST_TEST(f.at(e0) == f.at(e1));
  70. BOOST_TEST(f.at(e0) == f.at(e2));
  71. }
  72. BOOST_AUTO_TEST_CASE(homogeneous_color_base_4_default_constructor)
  73. {
  74. using fixture = color_base<4>;
  75. fixture f;
  76. BOOST_TEST(f.at(e0) == std::uint8_t{0});
  77. BOOST_TEST(f.at(e1) == std::uint8_t{0});
  78. BOOST_TEST(f.at(e2) == std::uint8_t{0});
  79. BOOST_TEST(f.at(e3) == std::uint8_t{0});
  80. }
  81. BOOST_AUTO_TEST_CASE(homogeneous_color_base_4_value_constructor)
  82. {
  83. using fixture = color_base<4>;
  84. fixture f{4};
  85. BOOST_TEST(f.at(e0) == std::uint8_t{4});
  86. BOOST_TEST(f.at(e0) == f.at(e1));
  87. BOOST_TEST(f.at(e0) == f.at(e2));
  88. BOOST_TEST(f.at(e0) == f.at(e3));
  89. }
  90. BOOST_AUTO_TEST_CASE(homogeneous_color_base_5_default_constructor)
  91. {
  92. using fixture = color_base<5>;
  93. fixture f;
  94. BOOST_TEST(f.at(e0) == std::uint8_t{0});
  95. BOOST_TEST(f.at(e1) == std::uint8_t{0});
  96. BOOST_TEST(f.at(e2) == std::uint8_t{0});
  97. BOOST_TEST(f.at(e3) == std::uint8_t{0});
  98. BOOST_TEST(f.at(e4) == std::uint8_t{0});
  99. }
  100. BOOST_AUTO_TEST_CASE(homogeneous_color_base_5_value_constructor)
  101. {
  102. using fixture = color_base<5>;
  103. fixture f{5};
  104. BOOST_TEST(f.at(e0) == f.at(e1));
  105. BOOST_TEST(f.at(e0) == f.at(e2));
  106. BOOST_TEST(f.at(e0) == f.at(e3));
  107. BOOST_TEST(f.at(e0) == f.at(e4));
  108. }