26 #include <mln/core/image/image1d.hh>
27 #include <mln/core/image/image2d.hh>
28 #include <mln/core/image/image3d.hh>
29 #include <mln/core/image/dmorph/sub_image.hh>
31 #include <mln/core/image/dmorph/image_if.hh>
32 #include <mln/fun/p2b/chess.hh>
34 #include <mln/literal/origin.hh>
36 #include <mln/value/int_u8.hh>
37 #include <mln/value/int_u16.hh>
39 #include <mln/value/int_s8.hh>
40 #include <mln/value/int_s16.hh>
43 #include <mln/debug/iota.hh>
45 #include <mln/data/saturate.hh>
46 #include <mln/data/paste.hh>
93 template <
typename I,
typename J>
95 chck(Image<I>& input_, Image<J>& output_)
97 typedef mln_value(I) T;
98 typedef mln_value(J) V;
99 unsigned max_i = mln_max (T);
100 unsigned max_j = mln_max (V);
101 I& input = exact(input_);
102 J& output = exact(output_);
105 data::saturate_inplace(input, 0, (T)max_j);
107 data::paste(input, output);
109 mln_piter(I) p (input.domain ());
111 mln_assertion ((V)(input(p)) == output(p));
114 template <typename I, typename J>
122 image1d<I> input (cols);
124 image1d<J> output (cols);
129 image1d<I> in (cols);
130 sub_image<image1d<I>,
box1d> input (in, b1);
132 image1d<J> output (cols);
146 template <
typename I,
typename J>
148 chk2d(
unsigned rows,
unsigned cols)
154 image2d<I> input (rows, cols);
156 image2d<J> output (rows, cols);
161 image2d<I> in (rows, cols);
162 sub_image<image2d<I>,
box2d> input (in, b2);
164 image2d<J> output (rows, cols);
178 template <
typename I,
typename J>
180 chk3d(
unsigned slis,
unsigned rows,
unsigned cols)
186 image3d<I> input (slis, rows, cols);
188 image3d<J> output (slis, rows, cols);
193 image3d<I> in (slis, rows, cols);
194 sub_image<image3d<I>,
box3d> input (in, b3);
196 image3d<J> output (slis, rows, cols);
211 template <
typename I,
typename J>
213 chk(
unsigned slis,
unsigned rows,
unsigned cols)
215 (std::cerr <<
" in 1d ... ").flush ();
217 for (
unsigned i = 2; i < cols; ++i)
220 std::cerr <<
"OK" << std::endl;
222 (std::cerr <<
" in 2d ... ").flush ();
224 for (
unsigned j = 2; j < rows; ++j)
225 for (
unsigned i = 2; i < cols; ++i)
228 std::cerr <<
"OK" << std::endl;
230 (std::cerr <<
" in 3d ... ").flush ();
232 for (
unsigned k = 2; k < slis; ++k)
233 for (
unsigned j = 2; j < rows; ++j)
234 for (
unsigned i = 2; i < cols; ++i)
235 chk3d<I, J>(k, j, i);
237 std::cerr <<
"OK" << std::endl;
240 template <
typename I>
242 ch(
unsigned slis,
unsigned rows,
unsigned cols)
244 std::cerr <<
" into int:" << std::endl;
245 chk<I, int>(slis, rows, cols);
246 std::cerr <<
" into unsigned:" << std::endl;
247 chk<I, unsigned>(slis, rows, cols);
248 std::cerr <<
" into int_u8:" << std::endl;
249 chk<I, value::int_u8>(slis, rows, cols);
250 std::cerr <<
" into int_u16:" << std::endl;
251 chk<I, value::int_u16>(slis, rows, cols);
252 std::cerr <<
" into int_s8:" << std::endl;
253 chk<I, value::int_s8>(slis, rows, cols);
254 std::cerr <<
" into int_s16:" << std::endl;
255 chk<I, value::int_s16>(slis, rows, cols);
268 std::cerr <<
"Tests data::paste:" << std::endl;
269 std::cerr <<
"on int:" << std::endl;
270 ch<int>(slis, rows, cols);
271 std::cerr <<
"on unsigned:" << std::endl;
272 ch<unsigned>(slis, rows, cols);