26 #include <mln/core/image/image1d.hh>
27 #include <mln/core/image/image2d.hh>
28 #include <mln/core/image/image3d.hh>
30 #include <mln/value/int_u8.hh>
31 #include <mln/value/int_u16.hh>
32 #include <mln/value/int_s8.hh>
33 #include <mln/value/int_s16.hh>
35 #include <mln/core/image/dmorph/sub_image.hh>
36 #include <mln/core/image/dmorph/image_if.hh>
37 #include <mln/fun/p2b/chess.hh>
39 #include <mln/accu/stat/min.hh>
40 #include <mln/accu/stat/max.hh>
41 #include <mln/debug/iota.hh>
42 #include <mln/debug/println.hh>
43 #include <mln/data/compute.hh>
95 image1d<I> ima (cols);
99 I real_max = (I)(cols % (
unsigned) mln_max(I));
101 if (cols >= (
unsigned)mln_max(I))
104 real_max = mln_max(I) - 1;
109 accu::stat::min<I> acu_min;
110 accu::stat::max<I> acu_max;
114 mln_assertion(min == real_min);
115 mln_assertion(max == real_max);
119 sub_image<image1d<I>,
box1d> sub_ima (ima, b1);
121 accu::stat::min<I> acu_min;
122 accu::stat::max<I> acu_max;
126 mln_assertion(min == real_min2);
127 mln_assertion(max == real_max2);
132 image_if<image1d<I>, f_box1d_t> if_ima(ima, f_b);
134 accu::stat::min<I> acu_min;
135 accu::stat::max<I> acu_max;
139 mln_assertion(min == real_min2);
140 mln_assertion(max == real_max2);
144 template <
typename I>
146 chk2d(
unsigned rows,
unsigned cols)
150 image2d<I> ima (rows, cols);
155 if (rows * cols >= (
unsigned)mln_max(I))
158 real_max = mln_max(I) - 1;
162 real_max = (I)(rows * cols);
163 if ((cols == (
unsigned)mln_max(I) - 2) ||
169 accu::stat::min<I> acu_min;
170 accu::stat::max<I> acu_max;
175 mln_assertion(min == real_min);
176 mln_assertion(max == real_max);
181 template <
typename I>
183 chk3d(
unsigned slis,
unsigned rows,
unsigned cols)
187 image3d<I> ima (slis, rows, cols);
191 if (slis * rows * cols >= (
unsigned)mln_max(I))
194 real_max = mln_max(I) - 1;
197 real_max = (I)(slis * rows * cols);
199 accu::stat::min<I> acu_min;
200 accu::stat::max<I> acu_max;
205 mln_assertion(min == real_min);
206 mln_assertion(max == real_max);
217 unsigned slis_start = 2;
218 unsigned slis_end = 3;
220 unsigned rows_start = 2;
221 unsigned rows_end = 16;
223 unsigned cols_start = 2;
224 unsigned cols_end = 256;
227 std::cerr <<
"Tests data::compute:" << std::endl;
229 (std::cerr <<
"in 1d ... ").flush ();
231 for (
unsigned i = cols_start; i < cols_end; ++i)
235 chk1d<value::int_u8>(i);
236 chk1d<value::int_u16>(i);
237 chk1d<value::int_s8>(i);
238 chk1d<value::int_s16>(i);
241 std::cerr <<
"OK" << std::endl;
243 (std::cerr <<
"in 2d ... ").flush ();
245 for (
unsigned j = rows_start; j < rows_end; ++j)
246 for (
unsigned i = cols_start; i < cols_end; ++i)
249 chk2d<unsigned>(j, i);
250 chk2d<value::int_u8>(j, i);
251 chk2d<value::int_u16>(j, i);
252 chk2d<value::int_s8>(j, i);
253 chk2d<value::int_s16>(j, i);
256 std::cerr <<
"OK" << std::endl;
258 (std::cerr <<
"in 3d ... ").flush ();
260 for (
unsigned k = slis_start; k < slis_end; ++k)
261 for (
unsigned j = rows_start; j < rows_end; ++j)
262 for (
unsigned i = cols_start; i < cols_end; ++i)
265 chk3d<unsigned>(k, j, i);
266 chk3d<value::int_u8>(k, j, i);
267 chk3d<value::int_u16>(k, j, i);
268 chk3d<value::int_s8>(k, j, i);
271 std::cerr <<
"OK" << std::endl;