* headers.mk: add new headers to distribution.
* mln/algebra/quat.hh: add a new overload of rotate().
* mln/canvas/labeling/level.hh,
* mln/canvas/labeling.hh: handle labeling abortion with
trace::warning.
* mln/core/internal/graph_psite_base.hh: remove a useless forward
declaration.
* mln/io/raw/all.hh: Rewrite, completely wrong...
* mln/accu/compute.hh,
* mln/core/image/tr_image.hh,
* mln/core/site_set/p_queue.hh,
* mln/io/raw/load.hh,
* mln/io/raw/save.hh,
* mln/value/shell.hh: update doc.
* mln/math/jacobi.hh: add missing casts and fix a bug with macros and
missing semicolons in for loops.
* tests/unit_test/Makefile.am,
* tests/unit_test/mln_convert_impl_from_site_set_to_image.cc,
* tests/unit_test/mln_core_image_p2p_image.cc,
* tests/unit_test/mln_core_image_slice_image.cc,
* tests/unit_test/mln_debug_slices_2d.cc,
* tests/unit_test/mln_fun_p2p_all.cc,
* tests/unit_test/mln_fun_p2p_translation.cc,
* tests/unit_test/mln_level_sort_offsets.cc: add new unit tests.
---
milena/ChangeLog | 36 ++++++++++++++++++++
milena/headers.mk | 7 ++++
milena/mln/accu/compute.hh | 4 +-
milena/mln/algebra/quat.hh | 24 ++++++++++---
milena/mln/canvas/labeling.hh | 4 +--
milena/mln/core/alias/point3d.hh | 1 +
milena/mln/core/image/tr_image.hh | 22 +++++-------
milena/mln/core/internal/graph_psite_base.hh | 4 --
milena/mln/core/site_set/p_queue.hh | 2 +-
milena/mln/io/raw/all.hh | 23 ++++++------
milena/mln/io/raw/load.hh | 1 +
milena/mln/io/raw/save.hh | 2 +
milena/mln/labeling/level.hh | 2 -
milena/mln/math/jacobi.hh | 25 ++++++++++---
milena/mln/value/shell.hh | 2 +-
milena/tests/unit_test/Makefile.am | 14 ++++++++
.../mln_convert_impl_from_site_set_to_image.cc | 11 ++++++
milena/tests/unit_test/mln_core_image_p2p_image.cc | 11 ++++++
.../tests/unit_test/mln_core_image_slice_image.cc | 11 ++++++
milena/tests/unit_test/mln_debug_slices_2d.cc | 11 ++++++
milena/tests/unit_test/mln_fun_p2p_all.cc | 11 ++++++
milena/tests/unit_test/mln_fun_p2p_translation.cc | 11 ++++++
milena/tests/unit_test/mln_level_sort_offsets.cc | 11 ++++++
23 files changed, 200 insertions(+), 50 deletions(-)
create mode 100644 milena/tests/unit_test/mln_convert_impl_from_site_set_to_image.cc
create mode 100644 milena/tests/unit_test/mln_core_image_p2p_image.cc
create mode 100644 milena/tests/unit_test/mln_core_image_slice_image.cc
create mode 100644 milena/tests/unit_test/mln_debug_slices_2d.cc
create mode 100644 milena/tests/unit_test/mln_fun_p2p_all.cc
create mode 100644 milena/tests/unit_test/mln_fun_p2p_translation.cc
create mode 100644 milena/tests/unit_test/mln_level_sort_offsets.cc
diff --git a/milena/ChangeLog b/milena/ChangeLog
index d4ee97a..cdee4a7 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,5 +1,41 @@
2009-02-02 Guillaume Lazzara <z(a)lrde.epita.fr>
+ Various small fixes.
+
+ * headers.mk: add new headers to distribution.
+
+ * mln/algebra/quat.hh: add a new overload of rotate().
+
+ * mln/canvas/labeling/level.hh,
+ * mln/canvas/labeling.hh: handle labeling abortion with
+ trace::warning.
+
+ * mln/core/internal/graph_psite_base.hh: remove a useless forward
+ declaration.
+
+ * mln/io/raw/all.hh: Rewrite, completely wrong...
+
+ * mln/accu/compute.hh,
+ * mln/core/image/tr_image.hh,
+ * mln/core/site_set/p_queue.hh,
+ * mln/io/raw/load.hh,
+ * mln/io/raw/save.hh,
+ * mln/value/shell.hh: update doc.
+
+ * mln/math/jacobi.hh: add missing casts and fix a bug with macros and
+ missing semicolons in for loops.
+
+ * tests/unit_test/Makefile.am,
+ * tests/unit_test/mln_convert_impl_from_site_set_to_image.cc,
+ * tests/unit_test/mln_core_image_p2p_image.cc,
+ * tests/unit_test/mln_core_image_slice_image.cc,
+ * tests/unit_test/mln_debug_slices_2d.cc,
+ * tests/unit_test/mln_fun_p2p_all.cc,
+ * tests/unit_test/mln_fun_p2p_translation.cc,
+ * tests/unit_test/mln_level_sort_offsets.cc: add new unit tests.
+
+2009-02-02 Guillaume Lazzara <z(a)lrde.epita.fr>
+
Add a new overload of make::image3d.
* mln/make/image3d.hh: create an image3d from a single image.
diff --git a/milena/headers.mk b/milena/headers.mk
index bb97122..d109eb7 100644
--- a/milena/headers.mk
+++ b/milena/headers.mk
@@ -181,6 +181,8 @@ mln/fun/p2b/all.hh \
mln/fun/p2b/has.hh \
mln/fun/p2b/big_chess.hh \
mln/fun/p2b/essential.hh \
+mln/fun/p2p/all.hh \
+mln/fun/p2p/translation.hh \
mln/fun/p2p/mirror.hh \
mln/fun/x2p/closest_point.hh \
mln/fun/x2p/all.hh \
@@ -274,6 +276,7 @@ mln/convert/from_to.hh \
mln/convert/impl/from_value_to_value.hh \
mln/convert/impl/all.hh \
mln/convert/impl/from_double_to_value.hh \
+mln/convert/impl/from_site_set_to_image.hh \
mln/convert/impl/from_image_to_site_set.hh \
mln/convert/impl/from_float_to_value.hh \
mln/convert/impl/from_int_to_value.hh \
@@ -397,6 +400,7 @@ mln/accu/line.hh \
mln/accu/essential.hh \
mln/accu/max_h.hh \
mln/level/compare.hh \
+mln/level/sort_offsets.hh \
mln/level/transform_inplace.hh \
mln/level/replace.hh \
mln/level/apply.hh \
@@ -931,6 +935,8 @@ mln/core/image/image_if.hh \
mln/core/image/hexa.hh \
mln/core/image/line_graph_elt_neighborhood.hh \
mln/core/image/extended.hh \
+mln/core/image/p2p_image.hh \
+mln/core/image/slice_image.hh \
mln/core/image/image2d_h.hh \
mln/core/image/image2d.hh \
mln/core/image/ch_piter.hh \
@@ -1035,6 +1041,7 @@ mln/debug/all.hh \
mln/debug/println_with_border.hh \
mln/debug/println.spe.hh \
mln/debug/colorize.hh \
+mln/debug/slices_2d.hh \
mln/debug/draw_graph.hh \
mln/debug/put_word.hh \
mln/debug/quiet.hh \
diff --git a/milena/mln/accu/compute.hh b/milena/mln/accu/compute.hh
index 69af068..a632fa8 100644
--- a/milena/mln/accu/compute.hh
+++ b/milena/mln/accu/compute.hh
@@ -86,7 +86,7 @@ namespace mln
namespace generic
{
-
+
template <typename A, typename I>
mln_result(A)
compute(const Accumulator<A>&, const Image<I>& input_)
@@ -106,7 +106,7 @@ namespace mln
}
} // end of namespace mln::accu::impl::generic
-
+
} // end of namespace mln::accu::impl
diff --git a/milena/mln/algebra/quat.hh b/milena/mln/algebra/quat.hh
index 13590d0..9dee769 100644
--- a/milena/mln/algebra/quat.hh
+++ b/milena/mln/algebra/quat.hh
@@ -32,6 +32,8 @@
/// \file mln/algebra/quat.hh
///
/// Define a class for quaternion algebra values.
+///
+/// \todo Inline computations in rotate routine.
# include <cmath>
@@ -194,8 +196,10 @@ namespace mln
quat& set_unit();
/// Rotate using quaternion definition of a rotation
- template <unsigned n>
- algebra::vec<n,float> rotate(const algebra::vec<n,float>& v);
+ template <unsigned n, typename T>
+ algebra::vec<n,float> rotate(const algebra::vec<n,T>& v) const;
+
+ quat rotate(const quat& q) const;
/// Transform into unit quaternion.
template <typename T>
@@ -257,7 +261,6 @@ namespace mln
quat slerp_5(const quat& p, const quat& q, float h);
-
# ifndef MLN_INCLUDE_ONLY
// Constructors.
@@ -482,14 +485,24 @@ namespace mln
set_unit(theta(), uv);
}
- template <unsigned n>
+ template <unsigned n, typename T>
inline
algebra::vec<n,float>
- quat::rotate(const algebra::vec<n,float>& v)
+ quat::rotate(const algebra::vec<n,T>& v) const
{
+ mln_precondition(is_unit());
return ((*this) * quat(0. ,v) * (*this).inv()).v();
}
+ inline
+ quat quat::rotate(const quat& q) const
+ {
+ mln_precondition(this->is_unit());
+ mln_precondition(q.is_pure());
+ return (*this) * q * this->inv();
+ }
+
+
// Operators.
inline
@@ -655,7 +668,6 @@ namespace mln
return tmp;
}
-
# endif // ! MLN_INCLUDE_ONLY
} // end of namespace mln::algebra
diff --git a/milena/mln/canvas/labeling.hh b/milena/mln/canvas/labeling.hh
index f6a5299..c8a9e5c 100644
--- a/milena/mln/canvas/labeling.hh
+++ b/milena/mln/canvas/labeling.hh
@@ -124,7 +124,6 @@ namespace mln
// Output.
mln_ch_value(I, L) output;
- bool status;
// Initialization.
{
@@ -181,7 +180,7 @@ namespace mln
{
if (nlabels == mln_max(L))
{
- status = false;
+ trace::warning("labeling aborted!");
return output;
}
output(p) = ++nlabels;
@@ -190,7 +189,6 @@ namespace mln
else
output(p) = output(parent(p));
}
- status = true;
}
trace::exiting("canvas::impl::generic::labeling");
diff --git a/milena/mln/core/alias/point3d.hh b/milena/mln/core/alias/point3d.hh
index ff88b5d..7ffac8f 100644
--- a/milena/mln/core/alias/point3d.hh
+++ b/milena/mln/core/alias/point3d.hh
@@ -55,6 +55,7 @@ namespace mln
template <typename C, typename E>
struct subject_impl< const point<grid::cube, C>, E >
+ : subject_point_impl< point<grid::cube, C>, E >
{
typedef C coord;
enum { dim = 3 };
diff --git a/milena/mln/core/image/tr_image.hh b/milena/mln/core/image/tr_image.hh
index 2ace346..a0fb983 100644
--- a/milena/mln/core/image/tr_image.hh
+++ b/milena/mln/core/image/tr_image.hh
@@ -1,4 +1,5 @@
-// Copyright (C) 2007 EPITA Research and Development Laboratory
+// Copyright (C) 2007, 2009 EPITA Research and Development Laboratory
+// (LRDE)
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -28,12 +29,10 @@
#ifndef MLN_CORE_IMAGE_TR_IMAGE_HH
# define MLN_CORE_IMAGE_TR_IMAGE_HH
-/*! \file mln/core/image/tr_image.hh
- *
- * \brief Definition of the morpher mln::tr_image presenting an image
- * through a (bijective) transformation.
- *
- */
+/// \file mln/core/image/tr_image.hh
+///
+/// Definition of the morpher mln::tr_image presenting an image
+/// through a (bijective) transformation.
# include <cmath>
@@ -41,11 +40,10 @@
# include <mln/algebra/vec.hh>
# include <mln/value/set.hh>
-
namespace mln
{
- // Fwd decl.
+ // Forward declaration.
template <typename S, typename I, typename T> struct tr_image;
namespace internal
@@ -78,10 +76,8 @@ namespace mln
} // end of namespace mln::trait
- /*! \brief Morpher that makes an image become transformed by a given
- * transformation.
- *
- */
+ /// Morpher that makes an image become transformed by a given
+ /// transformation.
template <typename S, typename I, typename T>
struct tr_image :
public mln::internal::image_identity< I, mln_pset(I), tr_image<S,I,T> >
diff --git a/milena/mln/core/internal/graph_psite_base.hh
b/milena/mln/core/internal/graph_psite_base.hh
index d0df650..3767fd2 100644
--- a/milena/mln/core/internal/graph_psite_base.hh
+++ b/milena/mln/core/internal/graph_psite_base.hh
@@ -39,10 +39,6 @@
namespace mln
{
- // Forward declaration.
- template <typename G, typename F> class p_vertices;
-
-
namespace internal
{
diff --git a/milena/mln/core/site_set/p_queue.hh b/milena/mln/core/site_set/p_queue.hh
index babc994..d6fc400 100644
--- a/milena/mln/core/site_set/p_queue.hh
+++ b/milena/mln/core/site_set/p_queue.hh
@@ -114,7 +114,7 @@ namespace mln
/// Push a site \p p in the queue.
void push(const P& p);
- /// Insertion element associated type.
+ /// Insertion element associated type.
typedef P i_element;
/// Insert a site \p p (equivalent as 'push').
diff --git a/milena/mln/io/raw/all.hh b/milena/mln/io/raw/all.hh
index c10fa1a..32d34d7 100644
--- a/milena/mln/io/raw/all.hh
+++ b/milena/mln/io/raw/all.hh
@@ -1,4 +1,4 @@
-// Copyright (C) 2007 EPITA Research and Development Laboratory
+// Copyright (C) 2009 EPITA Research and Development Laboratory (LRDE)
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -25,13 +25,12 @@
// reasons why the executable file might be covered by the GNU General
// Public License.
-#ifndef MLN_IO_PGM_ALL_HH
-# define MLN_IO_PGM_ALL_HH
+#ifndef MLN_IO_RAW_ALL_HH
+# define MLN_IO_RAW_ALL_HH
-/*! \file mln/io/pgm/all.hh
- *
- * \brief File that includes all pgm io materials.
- */
+/// \file mln/io/raw/all.hh
+///
+/// File that includes all raw io materials.
namespace mln
@@ -39,13 +38,13 @@ namespace mln
namespace io
{
- /// Namespace of pgm input/output handling.
- namespace pgm {}
+ /// Namespace of raw input/output handling.
+ namespace raw {}
}
}
-# include <mln/io/pgm/load.hh>
-# include <mln/io/pgm/save.hh>
+# include <mln/io/raw/load.hh>
+# include <mln/io/raw/save.hh>
-#endif // ! MLN_IO_PGM_ALL_HH
+#endif // ! MLN_IO_RAW_ALL_HH
diff --git a/milena/mln/io/raw/load.hh b/milena/mln/io/raw/load.hh
index d6e9077..eb1d789 100644
--- a/milena/mln/io/raw/load.hh
+++ b/milena/mln/io/raw/load.hh
@@ -98,6 +98,7 @@ namespace mln
{
I& ima = exact(ima_);
+ // Handle padding.
unsigned data_size = sizeof (mln_value(I)) + sizeof (mln_value(I)) % 2;
mln_box_runstart_piter(I) p(ima.domain());
diff --git a/milena/mln/io/raw/save.hh b/milena/mln/io/raw/save.hh
index 83b8fab..06c1f7d 100644
--- a/milena/mln/io/raw/save.hh
+++ b/milena/mln/io/raw/save.hh
@@ -31,6 +31,7 @@
/// \file mln/io/raw/save.hh
///
/// Save a Milena image by dumping its data to a file.
+/// \todo handle endianness.
# include <iostream>
# include <fstream>
@@ -82,6 +83,7 @@ namespace mln
inline
void save_data(I& ima, std::ofstream& file)
{
+ // Handle padding.
unsigned data_size = sizeof (mln_value(I)) + sizeof (mln_value(I)) % 2;
mln_box_runstart_piter(I) p(ima.domain());
diff --git a/milena/mln/labeling/level.hh b/milena/mln/labeling/level.hh
index 8e373ea..17850bc 100644
--- a/milena/mln/labeling/level.hh
+++ b/milena/mln/labeling/level.hh
@@ -171,8 +171,6 @@ namespace mln
level_functor<I> f(input, val);
mln_ch_value(I, L) output = canvas::labeling(input, nbh, f, nlabels);
- // FIXME: Handle canvas status.
-
trace::exiting("labeling::impl::generic::level");
return output;
}
diff --git a/milena/mln/math/jacobi.hh b/milena/mln/math/jacobi.hh
index 0992098..a09e07b 100644
--- a/milena/mln/math/jacobi.hh
+++ b/milena/mln/math/jacobi.hh
@@ -45,17 +45,19 @@ namespace mln
namespace math
{
- algebra::quat jacobi(algebra::mat < 4, 4, float >a);
+ algebra::quat
+ jacobi(algebra::mat<4u,4u,float> a);
# ifndef MLN_INCLUDE_ONLY
// FIXME: nD ?
#define rotateJacobi(a,i,j,k,l) g=a(i,j);h=a(k,l);a(i,j)=g-s*(h+g*tau); \
- a(k,l)=h+s*(g-h*tau)
+ a(k,l)=h+s*(g-h*tau);
- algebra::quat jacobi(algebra::mat < 4, 4, float >a)
+ algebra::quat
+ jacobi(algebra::mat<4u,4u,float> a)
{
float dd, d[4];
algebra::mat < 4, 4, float >v(literal::zero);
@@ -106,13 +108,13 @@ namespace mln
for (iq = ip + 1; iq < 4; iq++)
{
g = 100.0f * std::fabs(a(ip, iq));
- if (i > 4 && std::fabs(d[ip]) + g == std::fabs(d[ip])
- && std::fabs(d[iq]) + g == std::fabs(d[iq]))
+ if (i > 4 && (float)(std::fabs(d[ip]) + g) ==
(float)std::fabs(d[ip])
+ && (float)(std::fabs(d[iq]) + g) ==
(float)std::fabs(d[iq]))
a(ip, iq) = 0.0f;
else if (std::fabs(a(ip, iq)) > tresh)
{
h = d[iq] - d[ip];
- if (std::fabs(h) + g == std::fabs(h)) // unsafe?
+ if ((float)(std::fabs(h) + g) == (float)std::fabs(h)) // unsafe?
t = (a(ip, iq)) / h;
else
{
@@ -131,14 +133,25 @@ namespace mln
d[ip] -= h;
d[iq] += h;
a(ip, iq) = 0.0;
+
+ // DO *NOT* remove these semicolons!!
+ // rotateJacobi is a macro with 4 function calls.
for (j = 0; j <= ip - 1; j++)
+ {
rotateJacobi(a, j, ip, j, iq);
+ }
for (j = ip + 1; j <= iq - 1; j++)
+ {
rotateJacobi(a, ip, j, j, iq);
+ }
for (j = iq + 1; j < 4; j++)
+ {
rotateJacobi(a, ip, j, iq, j);
+ }
for (j = 0; j < 4; j++)
+ {
rotateJacobi(v, j, ip, j, iq);
+ }
}
}
}
diff --git a/milena/mln/value/shell.hh b/milena/mln/value/shell.hh
index 31799f4..e55b210 100644
--- a/milena/mln/value/shell.hh
+++ b/milena/mln/value/shell.hh
@@ -115,7 +115,7 @@ namespace mln
// Ctor
template <typename F, typename I>
- shell<F,I>::shell(Image<I> &ima, const mln_site(I) &s)
+ shell<F,I>::shell(Image<I>& ima, const mln_site(I)& s)
: ima_(exact(ima)), s_(s), v_(F()(exact(ima)(s)))
{
}
diff --git a/milena/tests/unit_test/Makefile.am b/milena/tests/unit_test/Makefile.am
index 09177d7..9ad9c7c 100644
--- a/milena/tests/unit_test/Makefile.am
+++ b/milena/tests/unit_test/Makefile.am
@@ -178,6 +178,8 @@ mln_fun_p2b_all \
mln_fun_p2b_has \
mln_fun_p2b_big_chess \
mln_fun_p2b_essential \
+mln_fun_p2p_all \
+mln_fun_p2p_translation \
mln_fun_p2p_mirror \
mln_fun_x2p_closest_point \
mln_fun_x2p_all \
@@ -271,6 +273,7 @@ mln_convert_from_to \
mln_convert_impl_from_value_to_value \
mln_convert_impl_all \
mln_convert_impl_from_double_to_value \
+mln_convert_impl_from_site_set_to_image \
mln_convert_impl_from_image_to_site_set \
mln_convert_impl_from_float_to_value \
mln_convert_impl_from_int_to_value \
@@ -393,6 +396,7 @@ mln_accu_line \
mln_accu_essential \
mln_accu_max_h \
mln_level_compare \
+mln_level_sort_offsets \
mln_level_transform_inplace \
mln_level_replace \
mln_level_apply \
@@ -902,6 +906,8 @@ mln_core_image_image_if \
mln_core_image_hexa \
mln_core_image_line_graph_elt_neighborhood \
mln_core_image_extended \
+mln_core_image_p2p_image \
+mln_core_image_slice_image \
mln_core_image_image2d_h \
mln_core_image_image2d \
mln_core_image_ch_piter \
@@ -999,6 +1005,7 @@ mln_debug_iota \
mln_debug_all \
mln_debug_println_with_border \
mln_debug_colorize \
+mln_debug_slices_2d \
mln_debug_draw_graph \
mln_debug_put_word \
mln_debug_quiet \
@@ -1212,6 +1219,8 @@ mln_fun_p2b_all_SOURCES = mln_fun_p2b_all.cc
mln_fun_p2b_has_SOURCES = mln_fun_p2b_has.cc
mln_fun_p2b_big_chess_SOURCES = mln_fun_p2b_big_chess.cc
mln_fun_p2b_essential_SOURCES = mln_fun_p2b_essential.cc
+mln_fun_p2p_all_SOURCES = mln_fun_p2p_all.cc
+mln_fun_p2p_translation_SOURCES = mln_fun_p2p_translation.cc
mln_fun_p2p_mirror_SOURCES = mln_fun_p2p_mirror.cc
mln_fun_x2p_closest_point_SOURCES = mln_fun_x2p_closest_point.cc
mln_fun_x2p_all_SOURCES = mln_fun_x2p_all.cc
@@ -1305,6 +1314,7 @@ mln_convert_from_to_SOURCES = mln_convert_from_to.cc
mln_convert_impl_from_value_to_value_SOURCES = mln_convert_impl_from_value_to_value.cc
mln_convert_impl_all_SOURCES = mln_convert_impl_all.cc
mln_convert_impl_from_double_to_value_SOURCES = mln_convert_impl_from_double_to_value.cc
+mln_convert_impl_from_site_set_to_image_SOURCES =
mln_convert_impl_from_site_set_to_image.cc
mln_convert_impl_from_image_to_site_set_SOURCES =
mln_convert_impl_from_image_to_site_set.cc
mln_convert_impl_from_float_to_value_SOURCES = mln_convert_impl_from_float_to_value.cc
mln_convert_impl_from_int_to_value_SOURCES = mln_convert_impl_from_int_to_value.cc
@@ -1427,6 +1437,7 @@ mln_accu_line_SOURCES = mln_accu_line.cc
mln_accu_essential_SOURCES = mln_accu_essential.cc
mln_accu_max_h_SOURCES = mln_accu_max_h.cc
mln_level_compare_SOURCES = mln_level_compare.cc
+mln_level_sort_offsets_SOURCES = mln_level_sort_offsets.cc
mln_level_transform_inplace_SOURCES = mln_level_transform_inplace.cc
mln_level_replace_SOURCES = mln_level_replace.cc
mln_level_apply_SOURCES = mln_level_apply.cc
@@ -1936,6 +1947,8 @@ mln_core_image_image_if_SOURCES = mln_core_image_image_if.cc
mln_core_image_hexa_SOURCES = mln_core_image_hexa.cc
mln_core_image_line_graph_elt_neighborhood_SOURCES =
mln_core_image_line_graph_elt_neighborhood.cc
mln_core_image_extended_SOURCES = mln_core_image_extended.cc
+mln_core_image_p2p_image_SOURCES = mln_core_image_p2p_image.cc
+mln_core_image_slice_image_SOURCES = mln_core_image_slice_image.cc
mln_core_image_image2d_h_SOURCES = mln_core_image_image2d_h.cc
mln_core_image_image2d_SOURCES = mln_core_image_image2d.cc
mln_core_image_ch_piter_SOURCES = mln_core_image_ch_piter.cc
@@ -2033,6 +2046,7 @@ mln_debug_iota_SOURCES = mln_debug_iota.cc
mln_debug_all_SOURCES = mln_debug_all.cc
mln_debug_println_with_border_SOURCES = mln_debug_println_with_border.cc
mln_debug_colorize_SOURCES = mln_debug_colorize.cc
+mln_debug_slices_2d_SOURCES = mln_debug_slices_2d.cc
mln_debug_draw_graph_SOURCES = mln_debug_draw_graph.cc
mln_debug_put_word_SOURCES = mln_debug_put_word.cc
mln_debug_quiet_SOURCES = mln_debug_quiet.cc
diff --git a/milena/tests/unit_test/mln_convert_impl_from_site_set_to_image.cc
b/milena/tests/unit_test/mln_convert_impl_from_site_set_to_image.cc
new file mode 100644
index 0000000..6af7096
--- /dev/null
+++ b/milena/tests/unit_test/mln_convert_impl_from_site_set_to_image.cc
@@ -0,0 +1,11 @@
+// Unit test for mln/convert/impl/from_site_set_to_image.hh.
+// Generated by ./build_unit_test.sh, do not modify.
+
+// Include the file twice, so we detect missing inclusion guards.
+#include <mln/convert/impl/from_site_set_to_image.hh>
+#include <mln/convert/impl/from_site_set_to_image.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_core_image_p2p_image.cc
b/milena/tests/unit_test/mln_core_image_p2p_image.cc
new file mode 100644
index 0000000..83595eb
--- /dev/null
+++ b/milena/tests/unit_test/mln_core_image_p2p_image.cc
@@ -0,0 +1,11 @@
+// Unit test for mln/core/image/p2p_image.hh.
+// Generated by ./build_unit_test.sh, do not modify.
+
+// Include the file twice, so we detect missing inclusion guards.
+#include <mln/core/image/p2p_image.hh>
+#include <mln/core/image/p2p_image.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_core_image_slice_image.cc
b/milena/tests/unit_test/mln_core_image_slice_image.cc
new file mode 100644
index 0000000..2f52ab1
--- /dev/null
+++ b/milena/tests/unit_test/mln_core_image_slice_image.cc
@@ -0,0 +1,11 @@
+// Unit test for mln/core/image/slice_image.hh.
+// Generated by ./build_unit_test.sh, do not modify.
+
+// Include the file twice, so we detect missing inclusion guards.
+#include <mln/core/image/slice_image.hh>
+#include <mln/core/image/slice_image.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_debug_slices_2d.cc
b/milena/tests/unit_test/mln_debug_slices_2d.cc
new file mode 100644
index 0000000..d74679f
--- /dev/null
+++ b/milena/tests/unit_test/mln_debug_slices_2d.cc
@@ -0,0 +1,11 @@
+// Unit test for mln/debug/slices_2d.hh.
+// Generated by ./build_unit_test.sh, do not modify.
+
+// Include the file twice, so we detect missing inclusion guards.
+#include <mln/debug/slices_2d.hh>
+#include <mln/debug/slices_2d.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_p2p_all.cc
b/milena/tests/unit_test/mln_fun_p2p_all.cc
new file mode 100644
index 0000000..f64c24e
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_p2p_all.cc
@@ -0,0 +1,11 @@
+// Unit test for mln/fun/p2p/all.hh.
+// Generated by ./build_unit_test.sh, do not modify.
+
+// Include the file twice, so we detect missing inclusion guards.
+#include <mln/fun/p2p/all.hh>
+#include <mln/fun/p2p/all.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_p2p_translation.cc
b/milena/tests/unit_test/mln_fun_p2p_translation.cc
new file mode 100644
index 0000000..5a1da3a
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_p2p_translation.cc
@@ -0,0 +1,11 @@
+// Unit test for mln/fun/p2p/translation.hh.
+// Generated by ./build_unit_test.sh, do not modify.
+
+// Include the file twice, so we detect missing inclusion guards.
+#include <mln/fun/p2p/translation.hh>
+#include <mln/fun/p2p/translation.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_level_sort_offsets.cc
b/milena/tests/unit_test/mln_level_sort_offsets.cc
new file mode 100644
index 0000000..a32249e
--- /dev/null
+++ b/milena/tests/unit_test/mln_level_sort_offsets.cc
@@ -0,0 +1,11 @@
+// Unit test for mln/level/sort_offsets.hh.
+// Generated by ./build_unit_test.sh, do not modify.
+
+// Include the file twice, so we detect missing inclusion guards.
+#include <mln/level/sort_offsets.hh>
+#include <mln/level/sort_offsets.hh>
+
+int main()
+{
+ // Nothing.
+}
--
1.5.6.5