2 // Copyright 2019 Mateusz Loskot <mateusz at loskot dot net>
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
8 #include <boost/gil/extension/numeric/affine.hpp>
9 #include <boost/gil/extension/numeric/resample.hpp>
10 #include <boost/gil/extension/numeric/sampler.hpp>
11 #include <boost/gil.hpp>
13 #define BOOST_TEST_MODULE test_ext_numeric_matrix3x2
14 #include "unit_test.hpp"
16 namespace gil = boost::gil;
19 constexpr double HALF_PI = 1.57079632679489661923;
22 BOOST_AUTO_TEST_CASE(matrix3x2_default_constructor)
24 gil::matrix3x2<int> m1;
25 BOOST_TEST(m1.a == 1);
26 BOOST_TEST(m1.b == 0);
27 BOOST_TEST(m1.c == 0);
28 BOOST_TEST(m1.d == 1);
29 BOOST_TEST(m1.e == 0);
30 BOOST_TEST(m1.f == 0);
33 BOOST_AUTO_TEST_CASE(matrix3x2_parameterized_constructor)
35 gil::matrix3x2<int> m1(1, 2, 3, 4, 5, 6);
36 BOOST_TEST(m1.a == 1);
37 BOOST_TEST(m1.b == 2);
38 BOOST_TEST(m1.c == 3);
39 BOOST_TEST(m1.d == 4);
40 BOOST_TEST(m1.e == 5);
41 BOOST_TEST(m1.f == 6);
44 BOOST_AUTO_TEST_CASE(matrix3x2_copy_constructor)
46 gil::matrix3x2<int> m1(1, 2, 3, 4, 5, 6);
47 gil::matrix3x2<int> m2(m1);
48 BOOST_TEST(m2.a == 1);
49 BOOST_TEST(m2.b == 2);
50 BOOST_TEST(m2.c == 3);
51 BOOST_TEST(m2.d == 4);
52 BOOST_TEST(m2.e == 5);
53 BOOST_TEST(m2.f == 6);
56 BOOST_AUTO_TEST_CASE(matrix3x2_assignment_operator)
58 gil::matrix3x2<int> m1(1, 2, 3, 4, 5, 6);
59 gil::matrix3x2<int> m2;
61 BOOST_TEST(m2.a == 1);
62 BOOST_TEST(m2.b == 2);
63 BOOST_TEST(m2.c == 3);
64 BOOST_TEST(m2.d == 4);
65 BOOST_TEST(m2.e == 5);
66 BOOST_TEST(m2.f == 6);
69 BOOST_AUTO_TEST_CASE(matrix3x2_multiplication_assignment)
71 gil::matrix3x2<int> m1;
72 gil::matrix3x2<int> m2;
74 BOOST_TEST(m2.a == 1);
75 BOOST_TEST(m2.b == 0);
76 BOOST_TEST(m2.c == 0);
77 BOOST_TEST(m2.d == 1);
78 BOOST_TEST(m2.e == 0);
79 BOOST_TEST(m2.f == 0);
81 gil::matrix3x2<int> m3(0, 0, 0, 0, 0, 0);
83 BOOST_TEST(m2.a == 0);
84 BOOST_TEST(m2.b == 0);
85 BOOST_TEST(m2.c == 0);
86 BOOST_TEST(m2.d == 0);
87 BOOST_TEST(m2.e == 0);
88 BOOST_TEST(m2.f == 0);
91 BOOST_AUTO_TEST_CASE(matrix3x2_matrix3x2_multiplication)
93 gil::matrix3x2<int> m1;
94 gil::matrix3x2<int> m2(0, 0, 0, 0, 0, 0);
95 gil::matrix3x2<int> m3;
97 BOOST_TEST(m3.a == 0);
98 BOOST_TEST(m3.b == 0);
99 BOOST_TEST(m3.c == 0);
100 BOOST_TEST(m3.d == 0);
101 BOOST_TEST(m3.e == 0);
102 BOOST_TEST(m3.f == 0);
105 BOOST_AUTO_TEST_CASE(matrix3x2_vector_multiplication)
107 gil::matrix3x2<int> m1;
108 gil::point<int> v1{2, 4};
110 gil::point<int> v2 = v1 * m1;
111 BOOST_TEST(v2.x == 2);
112 BOOST_TEST(v2.y == 4);
114 gil::point<int> v3 = gil::transform(m1, v1);
115 BOOST_TEST(v3.x == 2);
116 BOOST_TEST(v3.y == 4);
119 BOOST_AUTO_TEST_CASE(matrix3x2_get_rotate)
121 auto m1 = gil::matrix3x2<double>::get_rotate(HALF_PI);
122 BOOST_TEST(m1.a == std::cos(HALF_PI), btt::tolerance(0.03));
123 BOOST_TEST(m1.b == 1);
124 BOOST_TEST(m1.c == -1);
125 BOOST_TEST(m1.d == std::cos(HALF_PI), btt::tolerance(0.03));
126 BOOST_TEST(m1.e == 0);
127 BOOST_TEST(m1.f == 0);
130 BOOST_AUTO_TEST_CASE(matrix3x2_get_scale)
132 gil::matrix3x2<int> m1;
133 m1 = gil::matrix3x2<int>::get_scale(2);
134 BOOST_TEST(m1.a == 2);
135 BOOST_TEST(m1.b == 0);
136 BOOST_TEST(m1.c == 0);
137 BOOST_TEST(m1.d == 2);
138 BOOST_TEST(m1.e == 0);
139 BOOST_TEST(m1.f == 0);
140 m1 = gil::matrix3x2<int>::get_scale(2, 4);
141 BOOST_TEST(m1.a == 2);
142 BOOST_TEST(m1.d == 4);
143 m1 = gil::matrix3x2<int>::get_scale(gil::point<int>{4, 8});
144 BOOST_TEST(m1.a == 4);
145 BOOST_TEST(m1.d == 8);
148 BOOST_AUTO_TEST_CASE(matrix3x2_get_translate)
150 gil::matrix3x2<int> m1;
151 m1 = gil::matrix3x2<int>::get_translate(2, 4);
152 BOOST_TEST(m1.a == 1);
153 BOOST_TEST(m1.b == 0);
154 BOOST_TEST(m1.c == 0);
155 BOOST_TEST(m1.d == 1);
156 BOOST_TEST(m1.e == 2);
157 BOOST_TEST(m1.f == 4);
158 m1 = gil::matrix3x2<int>::get_translate(gil::point<int>{4, 8});
159 BOOST_TEST(m1.e == 4);
160 BOOST_TEST(m1.f == 8);
163 BOOST_AUTO_TEST_CASE(matrix3x2_transform)
165 gil::matrix3x2<int> m1;
166 gil::point<int> v1{2, 4};
167 gil::point<int> v2 = gil::transform(m1, v1);
168 BOOST_TEST(v2.x == 2);
169 BOOST_TEST(v2.y == 4);