test_interval_laws.hpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*-----------------------------------------------------------------------------+
  2. Copyright (c) 2010-2010: Joachim Faulhaber
  3. +------------------------------------------------------------------------------+
  4. Distributed under the Boost Software License, Version 1.0.
  5. (See accompanying file LICENCE.txt or copy at
  6. http://www.boost.org/LICENSE_1_0.txt)
  7. +-----------------------------------------------------------------------------*/
  8. /*-----------------------------------------------------------------------------+
  9. Function templates to call functions in object oriented or namespace glabal
  10. versions.
  11. +-----------------------------------------------------------------------------*/
  12. #ifndef BOOST_LIBS_ICL_TEST_INTERVAL_LAWS_HPP_JOFA_101011
  13. #define BOOST_LIBS_ICL_TEST_INTERVAL_LAWS_HPP_JOFA_101011
  14. #include <boost/icl/detail/notate.hpp>
  15. #include <boost/icl/detail/design_config.hpp>
  16. #include <boost/icl/type_traits/interval_type_default.hpp>
  17. #include <boost/icl/interval.hpp>
  18. #include <boost/icl/type_traits/is_interval.hpp>
  19. #include <boost/icl/concept/interval.hpp>
  20. namespace boost{ namespace icl
  21. {
  22. template<class Type>
  23. typename enable_if<is_interval<Type>, void>::type
  24. check_border_containedness(const Type& itv)
  25. {
  26. typedef typename interval_traits<Type>::domain_type domain_type;
  27. domain_type lo = icl::lower(itv);
  28. domain_type up = icl::upper(itv);
  29. //LAW: The empty set is contained in every set
  30. BOOST_CHECK_EQUAL(icl::contains(itv, icl::identity_element<Type>::value()), true);
  31. //LAW: Reflexivity: Every interval contains itself
  32. BOOST_CHECK_EQUAL(icl::contains(itv, itv), true);
  33. if(icl::bounds(itv) == interval_bounds::closed())
  34. {
  35. BOOST_CHECK_EQUAL(icl::contains(itv, lo), true);
  36. BOOST_CHECK_EQUAL(icl::contains(itv, up), true);
  37. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>:: closed(lo,up)), true);
  38. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>::right_open(lo,up)), true);
  39. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>:: left_open(lo,up)), true);
  40. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>:: open(lo,up)), true);
  41. }
  42. else if(icl::bounds(itv) == interval_bounds::right_open())
  43. {
  44. BOOST_CHECK_EQUAL(icl::contains(itv, lo), true);
  45. BOOST_CHECK_EQUAL(icl::contains(itv, up), false);
  46. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>:: closed(lo,up)), false);
  47. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>::right_open(lo,up)), true);
  48. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>:: left_open(lo,up)), false);
  49. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>:: open(lo,up)), true);
  50. }
  51. else if(icl::bounds(itv) == interval_bounds::left_open())
  52. {
  53. BOOST_CHECK_EQUAL(icl::contains(itv, lo), false);
  54. BOOST_CHECK_EQUAL(icl::contains(itv, up), true);
  55. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>:: closed(lo,up)), false);
  56. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>::right_open(lo,up)), false);
  57. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>:: left_open(lo,up)), true);
  58. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>:: open(lo,up)), true);
  59. }
  60. else if(icl::bounds(itv) == interval_bounds::open())
  61. {
  62. BOOST_CHECK_EQUAL(icl::contains(itv, lo), false);
  63. BOOST_CHECK_EQUAL(icl::contains(itv, up), false);
  64. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>:: closed(lo,up)), false);
  65. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>::right_open(lo,up)), false);
  66. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>:: left_open(lo,up)), false);
  67. BOOST_CHECK_EQUAL(icl::contains(itv, icl::interval<domain_type>:: open(lo,up)), true);
  68. }
  69. else
  70. {
  71. bool interval_borders_are_open_v_left_open_v_right_open_v_closed = true;
  72. BOOST_CHECK_EQUAL(interval_borders_are_open_v_left_open_v_right_open_v_closed, false);
  73. }
  74. }
  75. }} // namespace boost icl
  76. #endif // BOOST_ICL_TEST_INTERVAL_LAWS_HPP_JOFA_100908