• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List

mirror_full.cc

00001 // Copyright (C) 2007, 2008, 2009 EPITA Research and Development Laboratory (LRDE)
00002 //
00003 // This file is part of Olena.
00004 //
00005 // Olena is free software: you can redistribute it and/or modify it under
00006 // the terms of the GNU General Public License as published by the Free
00007 // Software Foundation, version 2 of the License.
00008 //
00009 // Olena is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012 // General Public License for more details.
00013 //
00014 // You should have received a copy of the GNU General Public License
00015 // along with Olena.  If not, see <http://www.gnu.org/licenses/>.
00016 //
00017 // As a special exception, you may use this file as part of a free
00018 // software project without restriction.  Specifically, if other files
00019 // instantiate templates or use macros or inline functions from this
00020 // file, or you compile this file and link it with other files to produce
00021 // an executable, this file does not by itself cause the resulting
00022 // executable to be covered by the GNU General Public License.  This
00023 // exception does not however invalidate any other reasons why the
00024 // executable file might be covered by the GNU General Public License.
00025 
00026 #include <mln/core/image/image1d.hh>
00027 #include <mln/core/image/image2d.hh>
00028 #include <mln/debug/iota.hh>
00029 #include <mln/border/mirror.hh>
00030 #include <mln/value/int_u8.hh>
00031 #include <mln/value/int_s8.hh>
00032 #include <mln/opt/element.hh>
00033 
00034 
00035 namespace mln
00036 {
00037 
00038   template <typename T>
00039   void chck1d (int cols, int border, T ref[])
00040   {
00041     int c = cols + 2 * border;
00042 
00043     image1d<T> ima(cols, border);
00044     debug::iota(ima);
00045     border::mirror(ima);
00046 
00047     for (int i = 0; i < c; ++i)
00048       mln_assertion(opt::element(ima, i) == ref[i]);
00049   }
00050 
00051   template <typename T>
00052   void chck2d (int rows, int cols, int border, T ref[])
00053   {
00054     int r = rows + 2 * border;
00055     int c = cols + 2 * border;
00056 
00057     image2d<T> ima(rows, cols, border);
00058     debug::iota(ima);
00059     border::mirror(ima);
00060 
00061     for (int i = 0; i < c * r; ++i)
00062       mln_assertion(opt::element(ima, i) == ref[i]);
00063   }
00064 
00065 }
00066 
00067 
00068 int
00069 main (void)
00070 {
00071   using namespace mln;
00072 
00073 
00074   std::cerr << "Tests border::mirror:" << std::endl;
00075 
00076   {
00077     std::cerr << "  in 1d :" << std::endl;
00078 
00079     {
00080       (std::cerr << "    on int_u8 with border = 3 ... ").flush ();
00081 
00082       typedef value::int_u8 T;
00083       int border = 3;
00084       int cols = 2;
00085       T ref[8] = {2, 2, 1, 1, 2, 2, 1, 1};
00086 
00087       chck1d(cols, border, ref);
00088       std::cerr << "OK" << std::endl;
00089     }
00090 
00091     {
00092       (std::cerr << "    on    int with border = 2 ... ").flush ();
00093 
00094       typedef int T;
00095       int border = 2;
00096       int cols = 3;
00097       T ref[7] = {2, 1, 1, 2, 3, 3, 2};
00098 
00099       chck1d(cols, border, ref);
00100       std::cerr << "OK" << std::endl;
00101     }
00102 
00103     {
00104       (std::cerr << "    on int_s8 with border = 1 ... ").flush ();
00105 
00106       typedef value::int_s8 T;
00107       int border = 1;
00108       int cols = 2;
00109       T ref[4] = {1, 1, 2, 2};
00110 
00111       chck1d(cols, border, ref);
00112       std::cerr << "OK" << std::endl;
00113     }
00114 
00115     {
00116       (std::cerr << "    on    int with border = 0 ... ").flush ();
00117       typedef int T;
00118       int border = 0;
00119       int cols = 4;
00120       T ref[4] = {1, 2, 3, 4};
00121 
00122       chck1d(cols, border, ref);
00123       std::cerr << "OK" << std::endl;
00124     }
00125 
00126   } // end of 1d
00127 
00128   {
00129     std::cerr << "  in 2d :" << std::endl;
00130 
00131     {
00132       (std::cerr << "    on    int with border = 3 ... ").flush ();
00133       typedef int T;
00134       int border = 3;
00135       int rows = 4;
00136       int cols = 5;
00137       T ref[110] =
00138         {
00139            1,  1,  1, 11, 12, 13, 14, 15,  5,  5,  5,
00140            1,  1,  1,  6,  7,  8,  9, 10,  5,  5,  5,
00141            1,  1,  1,  1,  2,  3,  4,  5,  5,  5,  5,
00142            3,  2,  1,  1,  2,  3,  4,  5,  5,  4,  3,
00143            8,  7,  6,  6,  7,  8,  9, 10, 10,  9,  8,
00144           13, 12, 11, 11, 12, 13, 14, 15, 15, 14, 13,
00145           18, 17, 16, 16, 17, 18, 19, 20, 20, 19, 18,
00146           16, 16, 16, 16, 17, 18, 19, 20, 20, 20, 20,
00147           16, 16, 16, 11, 12, 13, 14, 15, 20, 20, 20,
00148           16, 16, 16,  6,  7,  8,  9, 10, 20, 20, 20
00149         };
00150 
00151       chck2d(rows, cols, border, ref);
00152       std::cerr << "OK" << std::endl;
00153     }
00154 
00155     {
00156       (std::cerr << "    on int_u8 with border = 3 ... ").flush ();
00157       typedef value::int_u8 T;
00158       int border = 2;
00159       int rows = 4;
00160       int cols = 5;
00161       T ref[72] =
00162         {
00163            1,  1,  6,  7,  8,  9, 10,  5,  5,
00164            1,  1,  1,  2,  3,  4,  5,  5,  5,
00165            2,  1,  1,  2,  3,  4,  5,  5,  4,
00166            7,  6,  6,  7,  8,  9, 10, 10,  9,
00167           12, 11, 11, 12, 13, 14, 15, 15, 14,
00168           17, 16, 16, 17, 18, 19, 20, 20, 19,
00169           16, 16, 16, 17, 18, 19, 20, 20, 20,
00170           16, 16, 11, 12, 13, 14, 15, 20, 20
00171         };
00172 
00173       chck2d(rows, cols, border, ref);
00174       std::cerr << "OK" << std::endl;
00175     }
00176 
00177     {
00178       (std::cerr << "    on int_s8 with border = 1 ... ").flush ();
00179       typedef value::int_s8 T;
00180       int border = 1;
00181       int rows = 4;
00182       int cols = 5;
00183       T ref[49] =
00184         {
00185            1,  1,  2,  3,  4,  5,  5,
00186            1,  1,  2,  3,  4,  5,  5,
00187            6,  6,  7,  8,  9, 10, 10,
00188           11, 11, 12, 13, 14, 15, 15,
00189           16, 16, 17, 18, 19, 20, 20,
00190           16, 16, 17, 18, 19, 20, 20
00191         };
00192 
00193       chck2d(rows, cols, border, ref);
00194       std::cerr << "OK" << std::endl;
00195     }
00196 
00197     {
00198       (std::cerr << "    on    int with border = 0 ... ").flush ();
00199       typedef int T;
00200       int border = 0;
00201       int rows = 4;
00202       int cols = 5;
00203       T ref[20] =
00204         {
00205            1,  2,  3,  4,  5,
00206            6,  7,  8,  9,  10,
00207           11, 12, 13, 14, 15,
00208           16, 17, 18, 19, 20
00209         };
00210 
00211       chck2d(rows, cols, border, ref);
00212       std::cerr << "OK" << std::endl;
00213     }
00214 
00215   } // end of 2d
00216 
00217 }

Generated on Tue Oct 4 2011 15:24:06 for Milena (Olena) by  doxygen 1.7.1