Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / gil / test / core / color_base / static_transform.cpp
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/pixel.hpp>
10 #include <boost/gil/typedefs.hpp>
11
12 #include <type_traits>
13
14 #define BOOST_TEST_MODULE test_color_base_static_transform
15 #include "unit_test.hpp"
16
17 namespace gil = boost::gil;
18
19 BOOST_AUTO_TEST_CASE(single_source_gray8_to_gray8)
20 {
21     gil::gray8_pixel_t src{128};
22     gil::gray8_pixel_t dst{0};
23     gil::static_transform(src, dst, [](std::uint8_t src_channel) {
24         return src_channel; // copy
25     });
26     BOOST_TEST(gil::at_c<0>(src) == gil::at_c<0>(dst));
27 }
28
29 BOOST_AUTO_TEST_CASE(single_source_rgb8_to_rgb8)
30 {
31     gil::rgb8_pixel_t src{32, 64, 128};
32     gil::rgb8_pixel_t dst{0, 0, 0};
33     gil::static_transform(src, dst, [](std::uint8_t src_channel) {
34         return src_channel; // copy
35     });
36     BOOST_TEST(gil::at_c<0>(src) == gil::at_c<0>(dst));
37     BOOST_TEST(gil::at_c<1>(src) == gil::at_c<1>(dst));
38     BOOST_TEST(gil::at_c<2>(src) == gil::at_c<2>(dst));
39 }
40
41 BOOST_AUTO_TEST_CASE(single_source_rgb8_to_gray8)
42 {
43     // Transformation of wider space to narrower space is a valid operation
44     gil::rgb8_pixel_t  src{32,64, 128};
45     gil::gray8_pixel_t dst{0};
46     gil::static_transform(src, dst, [](std::uint8_t src_channel) {
47         return src_channel; // copy
48     });
49     BOOST_TEST(gil::at_c<0>(dst) == std::uint8_t{32});
50 }
51
52 BOOST_AUTO_TEST_CASE(single_source_cmyk8_to_rgb8)
53 {
54     // Transformation of wider space to narrower space is a valid operation
55     gil::cmyk8_pixel_t src{16, 32, 64, 128};
56     gil::rgb8_pixel_t dst{0, 0, 0};
57     gil::static_transform(src, dst, [](std::uint8_t src_channel) {
58         return src_channel; // copy
59     });
60     BOOST_TEST(gil::at_c<0>(dst) == std::uint8_t{16});
61     BOOST_TEST(gil::at_c<1>(dst) == std::uint8_t{32});
62     BOOST_TEST(gil::at_c<2>(dst) == std::uint8_t{64});
63 }
64