Milena (Olena)
User documentation 2.0a Id
|
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 }