libmoost
/home/mhx/git/github/libmoost/test/utils/relops.cpp
Go to the documentation of this file.
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()