test_doc_code.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. #include <boost/icl/rational.hpp>
  21. #include <boost/icl/detail/interval_morphism.hpp>
  22. #include <boost/icl/interval_map.hpp>
  23. #include "../test_laws.hpp"
  24. using namespace std;
  25. using namespace boost;
  26. using namespace unit_test;
  27. using namespace boost::icl;
  28. BOOST_AUTO_TEST_CASE(intro_sample_telecast)
  29. {
  30. // Switch on my favorite telecasts using an interval_set
  31. interval<int>::type news(2000, 2015);
  32. interval<int>::type talk_show(2245, 2330);
  33. interval_set<int> myTvProgram;
  34. myTvProgram.add(news).add(talk_show);
  35. // Iterating over elements (seconds) would be silly ...
  36. for(interval_set<int>::iterator telecast = myTvProgram.begin();
  37. telecast != myTvProgram.end(); ++telecast)
  38. //...so this iterates over intervals
  39. //TV.switch_on(*telecast);
  40. cout << *telecast;
  41. cout << endl;
  42. }
  43. BOOST_AUTO_TEST_CASE(interface_sample_identifiers)
  44. {
  45. typedef interval_set<std::string, less, continuous_interval<std::string> > IdentifiersT;
  46. IdentifiersT identifiers, excluded;
  47. // special identifiers shall be excluded
  48. identifiers += continuous_interval<std::string>::right_open("a", "c");
  49. identifiers -= std::string("boost");
  50. cout << "identifiers: " << identifiers << endl;
  51. excluded = IdentifiersT(icl::hull(identifiers)) - identifiers;
  52. cout << "excluded : " << excluded << endl;
  53. if(icl::contains(identifiers, std::string("boost")))
  54. cout << "error, identifiers.contains('boost')\n";
  55. }
  56. BOOST_AUTO_TEST_CASE(function_reference_element_iteration)
  57. {
  58. // begin of doc code -------------------------------------------------------
  59. interval_set<int> inter_set;
  60. inter_set.add(interval<int>::right_open(0,3))
  61. .add(interval<int>::right_open(7,9));
  62. for(interval_set<int>::element_const_iterator creeper = elements_begin(inter_set);
  63. creeper != elements_end(inter_set); ++creeper)
  64. cout << *creeper << " ";
  65. cout << endl;
  66. //Program output: 0 1 2 7 8
  67. for(interval_set<int>::element_reverse_iterator repeerc = elements_rbegin(inter_set);
  68. repeerc != elements_rend(inter_set); ++repeerc)
  69. cout << *repeerc << " ";
  70. cout << endl;
  71. //Program output: 8 7 2 1 0
  72. // end of doc code ---------------------------------------------------------
  73. // Testcode
  74. std::stringstream result;
  75. for(interval_set<int>::element_iterator creeper2 = elements_begin(inter_set);
  76. creeper2 != elements_end(inter_set); ++creeper2)
  77. result << *creeper2 << " ";
  78. BOOST_CHECK_EQUAL(result.str(), std::string("0 1 2 7 8 "));
  79. std::stringstream tluser;
  80. for(interval_set<int>::element_const_reverse_iterator repeerc2
  81. = elements_rbegin(const_cast<const interval_set<int>&>(inter_set));
  82. repeerc2 != elements_rend(const_cast<const interval_set<int>&>(inter_set)); ++repeerc2)
  83. tluser << *repeerc2 << " ";
  84. BOOST_CHECK_EQUAL(tluser.str(), std::string("8 7 2 1 0 "));
  85. }