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

duplicate_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/duplicate.hh>
00030 #include <mln/value/int_u8.hh>
00031 #include <mln/value/int_s8.hh>
00032 #include <mln/opt/element.hh>
00033 
00034 namespace mln
00035 {
00036 
00037   template <typename T>
00038   void chck1d(int cols, int border, T ref[])
00039   {
00040     int c = cols + 2 * border;
00041 
00042     image1d<T> ima(cols, border);
00043     debug::iota(ima);
00044     border::duplicate(ima);
00045 
00046     for (int i = 0; i < c; ++i)
00047       mln_assertion(opt::element(ima, i) == ref[i]);
00048   }
00049 
00050   template <typename T>
00051   void chck2d(int rows, int cols, int border, T ref[])
00052   {
00053     int r = rows + 2 * border;
00054     int c = cols + 2 * border;
00055 
00056     image2d<T> ima(rows, cols, border);
00057     debug::iota(ima);
00058     border::duplicate(ima);
00059 
00060     for (int i = 0; i < c * r; ++i)
00061       mln_assertion(opt::element(ima, i) == ref[i]);
00062   }
00063 
00064 }
00065 
00066 
00067 int
00068 main(void)
00069 {
00070   using namespace mln;
00071 
00072   std::cerr << "Tests border::duplicate:" << std::endl;
00073 
00074   {
00075     std::cerr << "  in 1d :" << std::endl;
00076 
00077     {
00078       (std::cerr << "    on int_u8 with border = 3 ... ").flush ();
00079 
00080       typedef value::int_u8 T;
00081       int border = 3;
00082       int cols = 2;
00083       T ref[8] = {1, 1, 1, 1, 2, 2, 2, 2};
00084 
00085       chck1d(cols, border, ref);
00086       std::cerr << "OK" << std::endl;
00087     }
00088 
00089     {
00090       (std::cerr << "    on    int with border = 2 ... ").flush ();
00091 
00092       typedef int T;
00093       int border = 2;
00094       int cols = 3;
00095       T ref[7] = {1, 1, 1, 2, 3, 3, 3};
00096 
00097       chck1d(cols, border, ref);
00098       std::cerr << "OK" << std::endl;
00099     }
00100 
00101     {
00102       (std::cerr << "    on int_s8 with border = 1 ... ").flush ();
00103 
00104       typedef value::int_s8 T;
00105       int border = 1;
00106       int cols = 2;
00107       T ref[4] = {1, 1, 2, 2};
00108 
00109       chck1d(cols, border, ref);
00110       std::cerr << "OK" << std::endl;
00111     }
00112 
00113     {
00114       (std::cerr << "    on    int with border = 0 ... ").flush ();
00115       typedef int T;
00116       int border = 0;
00117       int cols = 4;
00118       T ref[4] = {1, 2, 3, 4};
00119 
00120       chck1d(cols, border, ref);
00121       std::cerr << "OK" << std::endl;
00122     }
00123   } // end of 1d
00124 
00125 
00126   {
00127     std::cerr << "  in 2d :" << std::endl;
00128 
00129     {
00130       (std::cerr << "    on    int with border = 3 ... ").flush ();
00131       typedef int T;
00132       int border = 3;
00133       int rows = 4;
00134       int cols = 5;
00135       T ref[110] =
00136         {
00137           1,  1,  1,  1,  2,  3,  4,  5,  5,  5,  5,
00138           1,  1,  1,  1,  2,  3,  4,  5,  5,  5,  5,
00139           1,  1,  1,  1,  2,  3,  4,  5,  5,  5,  5,
00140           1,  1,  1,  1,  2,  3,  4,  5,  5,  5,  5,
00141           6,  6,  6,  6,  7,  8,  9,  10, 10, 10, 10,
00142           11, 11, 11, 11, 12, 13, 14, 15, 15, 15, 15,
00143           16, 16, 16, 16, 17, 18, 19, 20, 20, 20, 20,
00144           16, 16, 16, 16, 17, 18, 19, 20, 20, 20, 20,
00145           16, 16, 16, 16, 17, 18, 19, 20, 20, 20, 20,
00146           16, 16, 16, 16, 17, 18, 19, 20, 20, 20, 20
00147         };
00148 
00149       chck2d(rows, cols, border, ref);
00150       std::cerr << "OK" << std::endl;
00151     }
00152 
00153     {
00154       (std::cerr << "    on int_u8 with border = 3 ... ").flush ();
00155       typedef value::int_u8 T;
00156       int border = 2;
00157       int rows = 4;
00158       int cols = 5;
00159       T ref[72] =
00160         {
00161           1,  1,  1,  2,  3,  4,  5,  5,  5,
00162           1,  1,  1,  2,  3,  4,  5,  5,  5,
00163           1,  1,  1,  2,  3,  4,  5,  5,  5,
00164           6,  6,  6,  7,  8,  9,  10, 10, 10,
00165           11, 11, 11, 12, 13, 14, 15, 15, 15,
00166           16, 16, 16, 17, 18, 19, 20, 20, 20,
00167           16, 16, 16, 17, 18, 19, 20, 20, 20,
00168           16, 16, 16, 17, 18, 19, 20, 20, 20
00169         };
00170 
00171       chck2d(rows, cols, border, ref);
00172       std::cerr << "OK" << std::endl;
00173     }
00174 
00175     {
00176       (std::cerr << "    on int_s8 with border = 1 ... ").flush ();
00177       typedef value::int_s8 T;
00178       int border = 1;
00179       int rows = 4;
00180       int cols = 5;
00181       T ref[49] =
00182         {
00183           1,  1,  2,  3,  4,  5,  5,
00184           1,  1,  2,  3,  4,  5,  5,
00185           6,  6,  7,  8,  9,  10, 10,
00186           11, 11, 12, 13, 14, 15, 15,
00187           16, 16, 17, 18, 19, 20, 20,
00188           16, 16, 17, 18, 19, 20, 20
00189         };
00190 
00191       chck2d(rows, cols, border, ref);
00192       std::cerr << "OK" << std::endl;
00193     }
00194 
00195     {
00196       (std::cerr << "    on    int with border = 0 ... ").flush ();
00197       typedef int T;
00198       int border = 0;
00199       int rows = 4;
00200       int cols = 5;
00201       T ref[20] =
00202         {
00203           1,  2,  3,  4,  5,
00204           6,  7,  8,  9,  10,
00205           11, 12, 13, 14, 15,
00206           16, 17, 18, 19, 20
00207         };
00208 
00209       chck2d(rows, cols, border, ref);
00210       std::cerr << "OK" << std::endl;
00211     }
00212 
00213   } // end of 2d
00214 
00215 }

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