test_changing_interval_defaults.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /*-----------------------------------------------------------------------------+
  2. Copyright (c) 2008-2009: 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. #define BOOST_TEST_MODULE icl::test_doc_code unit test
  9. #include <libs/icl/test/disable_test_warnings.hpp>
  10. #include <limits>
  11. #include <complex>
  12. #include <string>
  13. #include <vector>
  14. #include <boost/mpl/list.hpp>
  15. #include "../unit_test_unwarned.hpp"
  16. // interval instance types
  17. #include "../test_type_lists.hpp"
  18. #include "../test_value_maker.hpp"
  19. #include <boost/type_traits/is_same.hpp>
  20. #define BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS
  21. #define BOOST_ICL_DISCRETE_STATIC_INTERVAL_DEFAULT right_open_interval
  22. #define BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS 2 //0=() 1=(] 2=[) 3=[]
  23. #include <boost/icl/rational.hpp>
  24. #include <boost/icl/detail/interval_morphism.hpp>
  25. #include <boost/icl/interval_map.hpp>
  26. #include "../test_laws.hpp"
  27. using namespace std;
  28. using namespace boost;
  29. using namespace unit_test;
  30. using namespace boost::icl;
  31. BOOST_AUTO_TEST_CASE(test_intervals_4_changed_lib_defaults)
  32. {
  33. #if defined(BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS) && !defined(BOOST_ICL_DISCRETE_STATIC_INTERVAL_DEFAULT)
  34. BOOST_CHECK( (boost::is_same<icl::interval<int >::type, right_open_interval<int > >::value) );
  35. BOOST_CHECK( (boost::is_same<icl::interval<double>::type, right_open_interval<double> >::value) );
  36. BOOST_CHECK_EQUAL( icl::interval<int>::open(0,2), icl::construct<right_open_interval<int> >(1,2) );
  37. BOOST_CHECK_EQUAL( icl::interval<int>::left_open(0,1), icl::construct<right_open_interval<int> >(1,2) );
  38. BOOST_CHECK_EQUAL( icl::interval<int>::right_open(1,2), icl::construct<right_open_interval<int> >(1,2) );
  39. BOOST_CHECK_EQUAL( icl::interval<int>::closed(1,1), icl::construct<right_open_interval<int> >(1,2) );
  40. BOOST_CHECK_EQUAL( icl::interval<float>::right_open(1.0,2.0), icl::construct<right_open_interval<float> >(1.0,2.0) );
  41. //The next yields compiletime error: STATIC_ASSERTION_FAILURE
  42. //BOOST_CHECK_EQUAL( icl::interval<float>::left_open(1.0,2.0), icl::construct<right_open_interval<float> >(1.0,2.0) );
  43. #endif
  44. #if defined(BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS) && defined(BOOST_ICL_DISCRETE_STATIC_INTERVAL_DEFAULT)
  45. # if defined(BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS) && (BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS == 0)
  46. cout << "discrete_interval == open_interval\n";
  47. BOOST_CHECK( (boost::is_same<icl::interval<int>::type, open_interval<int> >::value) );
  48. BOOST_CHECK_EQUAL( icl::interval<int>::open(0,2), icl::construct<open_interval<int> >(0,2) );
  49. BOOST_CHECK_EQUAL( icl::interval<int>::left_open(0,1), icl::construct<open_interval<int> >(0,2) );
  50. BOOST_CHECK_EQUAL( icl::interval<int>::right_open(1,2), icl::construct<open_interval<int> >(0,2) );
  51. BOOST_CHECK_EQUAL( icl::interval<int>::closed(1,1), icl::construct<open_interval<int> >(0,2) );
  52. # elif defined(BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS) && (BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS == 1)
  53. cout << "discrete_interval == left_open_interval\n";
  54. BOOST_CHECK( (boost::is_same<icl::interval<int>::type, left_open_interval<int> >::value) );
  55. BOOST_CHECK_EQUAL( icl::interval<int>::open(0,2), icl::construct<left_open_interval<int> >(0,1) );
  56. BOOST_CHECK_EQUAL( icl::interval<int>::left_open(0,1), icl::construct<left_open_interval<int> >(0,1) );
  57. BOOST_CHECK_EQUAL( icl::interval<int>::right_open(1,2), icl::construct<left_open_interval<int> >(0,1) );
  58. BOOST_CHECK_EQUAL( icl::interval<int>::closed(1,1), icl::construct<left_open_interval<int> >(0,1) );
  59. # elif defined(BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS) && (BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS == 2)
  60. cout << "discrete_interval == right_open_interval\n";
  61. BOOST_CHECK( (boost::is_same<icl::interval<int>::type, right_open_interval<int> >::value) );
  62. BOOST_CHECK_EQUAL( icl::interval<int>::open(0,2), icl::construct<right_open_interval<int> >(1,2) );
  63. BOOST_CHECK_EQUAL( icl::interval<int>::left_open(0,1), icl::construct<right_open_interval<int> >(1,2) );
  64. BOOST_CHECK_EQUAL( icl::interval<int>::right_open(1,2), icl::construct<right_open_interval<int> >(1,2) );
  65. BOOST_CHECK_EQUAL( icl::interval<int>::closed(1,1), icl::construct<right_open_interval<int> >(1,2) );
  66. # elif defined(BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS) && (BOOST_ICL_DISCRETE_STATIC_INTERVAL_BORDERS == 3)
  67. cout << "discrete_interval == closed_interval\n";
  68. BOOST_CHECK( (boost::is_same<icl::interval<int>::type, closed_interval<int> >::value) );
  69. BOOST_CHECK_EQUAL( icl::interval<int>::open(0,2), icl::construct<closed_interval<int> >(1,1) );
  70. BOOST_CHECK_EQUAL( icl::interval<int>::left_open(0,1), icl::construct<closed_interval<int> >(1,1) );
  71. BOOST_CHECK_EQUAL( icl::interval<int>::right_open(1,2), icl::construct<closed_interval<int> >(1,1) );
  72. BOOST_CHECK_EQUAL( icl::interval<int>::closed(1,1), icl::construct<closed_interval<int> >(1,1) );
  73. # else
  74. cout << "#else part, INTERVAL_BORDERS not in {0,1,2,3}\n";
  75. #endif //defined(BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS) && defined(BOOST_ICL_DISCRETE_STATIC_INTERVAL_DEFAULT)
  76. #else
  77. BOOST_CHECK( (boost::is_same<icl::interval<int >::type, discrete_interval<int > >::value) );
  78. BOOST_CHECK( (boost::is_same<icl::interval<double>::type, continuous_interval<double> >::value) );
  79. #endif
  80. }