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>
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_);
109 mln_piter(I)
p (input.domain ());
111 mln_assertion ((V)(input(
p)) == output(
p));
114 template <
typename I,
typename J>
146 template <
typename I,
typename J>
178 template <
typename I,
typename J>
180 chk3d(
unsigned slis,
unsigned rows,
unsigned 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);