range_c.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Copyright Aleksey Gurtovoy 2000-2004
  2. //
  3. // Distributed under the Boost Software License,Version 1.0.
  4. // (See accompanying file LICENSE_1_0.txt or copy at
  5. // http://www.boost.org/LICENSE_1_0.txt)
  6. //
  7. // See http://www.boost.org/libs/mpl for documentation.
  8. // $Id$
  9. // $Date$
  10. // $Revision$
  11. #include <boost/mpl/range_c.hpp>
  12. #include <boost/mpl/advance.hpp>
  13. #include <boost/mpl/distance.hpp>
  14. #include <boost/mpl/empty.hpp>
  15. #include <boost/mpl/size.hpp>
  16. #include <boost/mpl/front.hpp>
  17. #include <boost/mpl/back.hpp>
  18. #include <boost/mpl/aux_/test.hpp>
  19. MPL_TEST_CASE()
  20. {
  21. typedef range_c<int,0,0> range0;
  22. typedef range_c<int,0,1> range1;
  23. typedef range_c<int,0,10> range10;
  24. MPL_ASSERT_RELATION( size<range0>::value, ==, 0 );
  25. MPL_ASSERT_RELATION( size<range1>::value, ==, 1 );
  26. MPL_ASSERT_RELATION( size<range10>::value, ==, 10 );
  27. MPL_ASSERT(( empty<range0> ));
  28. MPL_ASSERT_NOT(( empty<range1> ));
  29. MPL_ASSERT_NOT(( empty<range10> ));
  30. MPL_ASSERT(( is_same< begin<range0>::type, end<range0>::type > ));
  31. MPL_ASSERT_NOT(( is_same<begin<range1>::type, end<range1>::type > ));
  32. MPL_ASSERT_NOT(( is_same<begin<range10>::type, end<range10>::type > ));
  33. MPL_ASSERT_RELATION( front<range1>::type::value, ==, 0 );
  34. MPL_ASSERT_RELATION( back<range1>::type::value, ==, 0 );
  35. MPL_ASSERT_RELATION( front<range10>::type::value, ==, 0 );
  36. MPL_ASSERT_RELATION( back<range10>::type::value, ==, 9 );
  37. }
  38. MPL_TEST_CASE()
  39. {
  40. typedef range_c<unsigned char,0,10> r;
  41. typedef begin<r>::type first;
  42. typedef end<r>::type last;
  43. MPL_ASSERT(( is_same< advance_c<first,10>::type, last > ));
  44. MPL_ASSERT(( is_same< advance_c<last,-10>::type, first > ));
  45. MPL_ASSERT_RELATION( ( mpl::distance<first,last>::value ), ==, 10 );
  46. typedef advance_c<first,5>::type iter;
  47. MPL_ASSERT_RELATION( deref<iter>::type::value, ==, 5 );
  48. }