libmoost
|
00001 /* vim:set ts=3 sw=3 sts=3 et: */ 00028 #include <boost/test/unit_test.hpp> 00029 00030 #include "../../include/moost/utils/relops.hpp" 00031 00032 using namespace moost::utils; 00033 00034 00035 namespace { 00036 template<int N> 00037 struct xnum_; 00038 00039 template<int N> 00040 struct num_ : relops<num_<N> > 00041 { 00042 static const int val = N; 00043 00044 // ------------------------------------------ 00045 // Support for comparing with myself 00046 // ------------------------------------------ 00047 template<int U> 00048 bool operator == (num_<U> const & rhs) const 00049 { 00050 return val == rhs.val; 00051 } 00052 00053 template<int U> 00054 bool operator < (num_<U> const & rhs) const 00055 { 00056 return val < rhs.val; 00057 } 00058 // ------------------------------------------ 00059 // Support for comparing with xnum_<N> 00060 // ------------------------------------------ 00061 template<int U> 00062 bool operator == (xnum_<U> const & rhs) const 00063 { 00064 return val == rhs.val; 00065 } 00066 00067 template<int U> 00068 bool operator < (xnum_<U> const & rhs) const 00069 { 00070 return val < rhs.val; 00071 } 00072 // ------------------------------------------ 00073 }; 00074 00075 // It's safe to construct this here becasuse num_<T> is a POD 00076 // NB. the constructor won't throw. 00077 num_<0> _0; 00078 num_<1> _1; 00079 num_<2> _2; 00080 00081 template<int N> 00082 struct xnum_ 00083 { 00084 static const int val = N; 00085 }; 00086 00087 xnum_<0> _x0; 00088 xnum_<1> _x1; 00089 xnum_<2> _x2; 00090 } 00091 00092 BOOST_AUTO_TEST_SUITE(moost_utils_relops) 00093 00094 BOOST_AUTO_TEST_CASE(test_equal) 00095 { 00096 00097 BOOST_CHECK((_0 == _0) == (0 == 0)); 00098 BOOST_CHECK((_0 == _1) == (0 == 1)); 00099 BOOST_CHECK((_0 == _2) == (0 == 2)); 00100 00101 BOOST_CHECK((_1 == _0) == (1 == 0)); 00102 BOOST_CHECK((_1 == _1) == (1 == 1)); 00103 BOOST_CHECK((_1 == _2) == (1 == 2)); 00104 00105 BOOST_CHECK((_2 == _0) == (2 == 0)); 00106 BOOST_CHECK((_2 == _1) == (2 == 1)); 00107 BOOST_CHECK((_2 == _2) == (2 == 2)); 00108 } 00109 00110 BOOST_AUTO_TEST_CASE(test_less) 00111 { 00112 00113 BOOST_CHECK((_0 < _0) == (0 < 0)); 00114 BOOST_CHECK((_0 < _1) == (0 < 1)); 00115 BOOST_CHECK((_0 < _2) == (0 < 2)); 00116 00117 BOOST_CHECK((_1 < _0) == (1 < 0)); 00118 BOOST_CHECK((_1 < _1) == (1 < 1)); 00119 BOOST_CHECK((_1 < _2) == (1 < 2)); 00120 00121 BOOST_CHECK((_2 < _0) == (2 < 0)); 00122 BOOST_CHECK((_2 < _1) == (2 < 1)); 00123 BOOST_CHECK((_2 < _2) == (2 < 2)); 00124 } 00125 00126 BOOST_AUTO_TEST_CASE(test_not_equal) 00127 { 00128 00129 BOOST_CHECK((_0 != _0) == (0 != 0)); 00130 BOOST_CHECK((_0 != _1) == (0 != 1)); 00131 BOOST_CHECK((_0 != _2) == (0 != 2)); 00132 00133 BOOST_CHECK((_1 != _0) == (1 != 0)); 00134 BOOST_CHECK((_1 != _1) == (1 != 1)); 00135 BOOST_CHECK((_1 != _2) == (1 != 2)); 00136 00137 BOOST_CHECK((_2 != _0) == (2 != 0)); 00138 BOOST_CHECK((_2 != _1) == (2 != 1)); 00139 BOOST_CHECK((_2 != _2) == (2 != 2)); 00140 } 00141 00142 BOOST_AUTO_TEST_CASE(test_greater) 00143 { 00144 00145 BOOST_CHECK((_0 > _0) == (0 > 0)); 00146 BOOST_CHECK((_0 > _1) == (0 > 1)); 00147 BOOST_CHECK((_0 > _2) == (0 > 2)); 00148 00149 BOOST_CHECK((_1 > _0) == (1 > 0)); 00150 BOOST_CHECK((_1 > _1) == (1 > 1)); 00151 BOOST_CHECK((_1 > _2) == (1 > 2)); 00152 00153 BOOST_CHECK((_2 > _0) == (2 > 0)); 00154 BOOST_CHECK((_2 > _1) == (2 > 1)); 00155 BOOST_CHECK((_2 > _2) == (2 > 2)); 00156 } 00157 00158 BOOST_AUTO_TEST_CASE(test_less_equal) 00159 { 00160 00161 BOOST_CHECK((_0 <= _0) == (0 <= 0)); 00162 BOOST_CHECK((_0 <= _1) == (0 <= 1)); 00163 BOOST_CHECK((_0 <= _2) == (0 <= 2)); 00164 00165 BOOST_CHECK((_1 <= _0) == (1 <= 0)); 00166 BOOST_CHECK((_1 <= _1) == (1 <= 1)); 00167 BOOST_CHECK((_1 <= _2) == (1 <= 2)); 00168 00169 BOOST_CHECK((_2 <= _0) == (2 <= 0)); 00170 BOOST_CHECK((_2 <= _1) == (2 <= 1)); 00171 BOOST_CHECK((_2 <= _2) == (2 <= 2)); 00172 } 00173 00174 BOOST_AUTO_TEST_CASE(test_greater_equal) 00175 { 00176 00177 BOOST_CHECK((_0 >= _0) == (0 >= 0)); 00178 BOOST_CHECK((_0 >= _1) == (0 >= 1)); 00179 BOOST_CHECK((_0 >= _2) == (0 >= 2)); 00180 00181 BOOST_CHECK((_1 >= _0) == (1 >= 0)); 00182 BOOST_CHECK((_1 >= _1) == (1 >= 1)); 00183 BOOST_CHECK((_1 >= _2) == (1 >= 2)); 00184 00185 BOOST_CHECK((_2 >= _0) == (2 >= 0)); 00186 BOOST_CHECK((_2 >= _1) == (2 >= 1)); 00187 BOOST_CHECK((_2 >= _2) == (2 >= 2)); 00188 } 00189 00190 BOOST_AUTO_TEST_CASE(test_equalx) 00191 { 00192 00193 BOOST_CHECK((_0 == _x0) == (0 == 0)); 00194 BOOST_CHECK((_0 == _x1) == (0 == 1)); 00195 BOOST_CHECK((_0 == _x2) == (0 == 2)); 00196 00197 BOOST_CHECK((_1 == _x0) == (1 == 0)); 00198 BOOST_CHECK((_1 == _x1) == (1 == 1)); 00199 BOOST_CHECK((_1 == _x2) == (1 == 2)); 00200 00201 BOOST_CHECK((_2 == _x0) == (2 == 0)); 00202 BOOST_CHECK((_2 == _x1) == (2 == 1)); 00203 BOOST_CHECK((_2 == _x2) == (2 == 2)); 00204 } 00205 00206 BOOST_AUTO_TEST_CASE(test_lessx) 00207 { 00208 00209 BOOST_CHECK((_0 < _x0) == (0 < 0)); 00210 BOOST_CHECK((_0 < _x1) == (0 < 1)); 00211 BOOST_CHECK((_0 < _x2) == (0 < 2)); 00212 00213 BOOST_CHECK((_1 < _x0) == (1 < 0)); 00214 BOOST_CHECK((_1 < _x1) == (1 < 1)); 00215 BOOST_CHECK((_1 < _x2) == (1 < 2)); 00216 00217 BOOST_CHECK((_2 < _x0) == (2 < 0)); 00218 BOOST_CHECK((_2 < _x1) == (2 < 1)); 00219 BOOST_CHECK((_2 < _x2) == (2 < 2)); 00220 } 00221 00222 BOOST_AUTO_TEST_CASE(test_not_equalx) 00223 { 00224 00225 BOOST_CHECK((_0 != _x0) == (0 != 0)); 00226 BOOST_CHECK((_0 != _x1) == (0 != 1)); 00227 BOOST_CHECK((_0 != _x2) == (0 != 2)); 00228 00229 BOOST_CHECK((_1 != _x0) == (1 != 0)); 00230 BOOST_CHECK((_1 != _x1) == (1 != 1)); 00231 BOOST_CHECK((_1 != _x2) == (1 != 2)); 00232 00233 BOOST_CHECK((_2 != _x0) == (2 != 0)); 00234 BOOST_CHECK((_2 != _x1) == (2 != 1)); 00235 BOOST_CHECK((_2 != _x2) == (2 != 2)); 00236 } 00237 00238 BOOST_AUTO_TEST_CASE(test_greaterx) 00239 { 00240 00241 BOOST_CHECK((_0 > _x0) == (0 > 0)); 00242 BOOST_CHECK((_0 > _x1) == (0 > 1)); 00243 BOOST_CHECK((_0 > _x2) == (0 > 2)); 00244 00245 BOOST_CHECK((_1 > _x0) == (1 > 0)); 00246 BOOST_CHECK((_1 > _x1) == (1 > 1)); 00247 BOOST_CHECK((_1 > _x2) == (1 > 2)); 00248 00249 BOOST_CHECK((_2 > _x0) == (2 > 0)); 00250 BOOST_CHECK((_2 > _x1) == (2 > 1)); 00251 BOOST_CHECK((_2 > _x2) == (2 > 2)); 00252 } 00253 00254 BOOST_AUTO_TEST_CASE(test_less_equalx) 00255 { 00256 00257 BOOST_CHECK((_0 <= _x0) == (0 <= 0)); 00258 BOOST_CHECK((_0 <= _x1) == (0 <= 1)); 00259 BOOST_CHECK((_0 <= _x2) == (0 <= 2)); 00260 00261 BOOST_CHECK((_1 <= _x0) == (1 <= 0)); 00262 BOOST_CHECK((_1 <= _x1) == (1 <= 1)); 00263 BOOST_CHECK((_1 <= _x2) == (1 <= 2)); 00264 00265 BOOST_CHECK((_2 <= _x0) == (2 <= 0)); 00266 BOOST_CHECK((_2 <= _x1) == (2 <= 1)); 00267 BOOST_CHECK((_2 <= _x2) == (2 <= 2)); 00268 } 00269 00270 BOOST_AUTO_TEST_CASE(test_greater_equalx) 00271 { 00272 00273 BOOST_CHECK((_0 >= _x0) == (0 >= 0)); 00274 BOOST_CHECK((_0 >= _x1) == (0 >= 1)); 00275 BOOST_CHECK((_0 >= _x2) == (0 >= 2)); 00276 00277 BOOST_CHECK((_1 >= _x0) == (1 >= 0)); 00278 BOOST_CHECK((_1 >= _x1) == (1 >= 1)); 00279 BOOST_CHECK((_1 >= _x2) == (1 >= 2)); 00280 00281 BOOST_CHECK((_2 >= _x0) == (2 >= 0)); 00282 BOOST_CHECK((_2 >= _x1) == (2 >= 1)); 00283 BOOST_CHECK((_2 >= _x2) == (2 >= 2)); 00284 } 00285 00286 BOOST_AUTO_TEST_CASE(test_xequal) 00287 { 00288 00289 BOOST_CHECK((_x0 == _0) == (0 == 0)); 00290 BOOST_CHECK((_x0 == _1) == (0 == 1)); 00291 BOOST_CHECK((_x0 == _2) == (0 == 2)); 00292 00293 BOOST_CHECK((_x1 == _0) == (1 == 0)); 00294 BOOST_CHECK((_x1 == _1) == (1 == 1)); 00295 BOOST_CHECK((_x1 == _2) == (1 == 2)); 00296 00297 BOOST_CHECK((_x2 == _0) == (2 == 0)); 00298 BOOST_CHECK((_x2 == _1) == (2 == 1)); 00299 BOOST_CHECK((_x2 == _2) == (2 == 2)); 00300 } 00301 00302 BOOST_AUTO_TEST_CASE(test_xless) 00303 { 00304 00305 BOOST_CHECK((_x0 < _0) == (0 < 0)); 00306 BOOST_CHECK((_x0 < _1) == (0 < 1)); 00307 BOOST_CHECK((_x0 < _2) == (0 < 2)); 00308 00309 BOOST_CHECK((_x1 < _0) == (1 < 0)); 00310 BOOST_CHECK((_x1 < _1) == (1 < 1)); 00311 BOOST_CHECK((_x1 < _2) == (1 < 2)); 00312 00313 BOOST_CHECK((_x2 < _0) == (2 < 0)); 00314 BOOST_CHECK((_x2 < _1) == (2 < 1)); 00315 BOOST_CHECK((_x2 < _2) == (2 < 2)); 00316 } 00317 00318 BOOST_AUTO_TEST_CASE(test_xnot_equal) 00319 { 00320 00321 BOOST_CHECK((_x0 != _0) == (0 != 0)); 00322 BOOST_CHECK((_x0 != _1) == (0 != 1)); 00323 BOOST_CHECK((_x0 != _2) == (0 != 2)); 00324 00325 BOOST_CHECK((_x1 != _0) == (1 != 0)); 00326 BOOST_CHECK((_x1 != _1) == (1 != 1)); 00327 BOOST_CHECK((_x1 != _2) == (1 != 2)); 00328 00329 BOOST_CHECK((_x2 != _0) == (2 != 0)); 00330 BOOST_CHECK((_x2 != _1) == (2 != 1)); 00331 BOOST_CHECK((_x2 != _2) == (2 != 2)); 00332 } 00333 00334 BOOST_AUTO_TEST_CASE(test_xgreater) 00335 { 00336 00337 BOOST_CHECK((_x0 > _0) == (0 > 0)); 00338 BOOST_CHECK((_x0 > _1) == (0 > 1)); 00339 BOOST_CHECK((_x0 > _2) == (0 > 2)); 00340 00341 BOOST_CHECK((_x1 > _0) == (1 > 0)); 00342 BOOST_CHECK((_x1 > _1) == (1 > 1)); 00343 BOOST_CHECK((_x1 > _2) == (1 > 2)); 00344 00345 BOOST_CHECK((_x2 > _0) == (2 > 0)); 00346 BOOST_CHECK((_x2 > _1) == (2 > 1)); 00347 BOOST_CHECK((_x2 > _2) == (2 > 2)); 00348 } 00349 00350 BOOST_AUTO_TEST_CASE(test_xless_equal) 00351 { 00352 00353 BOOST_CHECK((_x0 <= _0) == (0 <= 0)); 00354 BOOST_CHECK((_x0 <= _1) == (0 <= 1)); 00355 BOOST_CHECK((_x0 <= _2) == (0 <= 2)); 00356 00357 BOOST_CHECK((_x1 <= _0) == (1 <= 0)); 00358 BOOST_CHECK((_x1 <= _1) == (1 <= 1)); 00359 BOOST_CHECK((_x1 <= _2) == (1 <= 2)); 00360 00361 BOOST_CHECK((_x2 <= _0) == (2 <= 0)); 00362 BOOST_CHECK((_x2 <= _1) == (2 <= 1)); 00363 BOOST_CHECK((_x2 <= _2) == (2 <= 2)); 00364 } 00365 00366 BOOST_AUTO_TEST_CASE(test_xgreater_equal) 00367 { 00368 00369 BOOST_CHECK((_x0 >= _0) == (0 >= 0)); 00370 BOOST_CHECK((_x0 >= _1) == (0 >= 1)); 00371 BOOST_CHECK((_x0 >= _2) == (0 >= 2)); 00372 00373 BOOST_CHECK((_x1 >= _0) == (1 >= 0)); 00374 BOOST_CHECK((_x1 >= _1) == (1 >= 1)); 00375 BOOST_CHECK((_x1 >= _2) == (1 >= 2)); 00376 00377 BOOST_CHECK((_x2 >= _0) == (2 >= 0)); 00378 BOOST_CHECK((_x2 >= _1) == (2 >= 1)); 00379 BOOST_CHECK((_x2 >= _2) == (2 >= 2)); 00380 } 00381 00382 BOOST_AUTO_TEST_SUITE_END()