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::example_boost_party unit test
10 #include <libs/icl/test/disable_test_warnings.hpp>
11 #include "../unit_test_unwarned.hpp"
12 //#include <boost/icl/set.hpp> // Needed for implicit calls of operator << on
13 //JODO CLANG // GuestSets via test macros.
15 //------------------------------------------------------------------------------
16 // begin example code. return value added to function boost_party
17 //------------------------------------------------------------------------------
18 #include <boost/icl/ptime.hpp>
20 #include <boost/icl/interval_map.hpp>
23 using namespace boost::posix_time
;
24 using namespace boost::icl
;
26 // Type set<string> collects the names of party guests. Since std::set is
27 // a model of the itl's set concept, the concept provides an operator +=
28 // that performs a set union on overlap of intervals.
29 typedef std::set
<string
> GuestSetT
;
31 interval_map
<ptime
, GuestSetT
> boost_party()
34 mary_harry
.insert("Mary");
35 mary_harry
.insert("Harry");
37 GuestSetT diana_susan
;
38 diana_susan
.insert("Diana");
39 diana_susan
.insert("Susan");
42 peter
.insert("Peter");
44 // A party is an interval map that maps time intervals to sets of guests
45 interval_map
<ptime
, GuestSetT
> party
;
47 party
.add( // add and element
49 interval
<ptime
>::right_open(
50 time_from_string("2008-05-20 19:30"),
51 time_from_string("2008-05-20 23:00")),
54 party
+= // element addition can also be done via operator +=
56 interval
<ptime
>::right_open(
57 time_from_string("2008-05-20 20:10"),
58 time_from_string("2008-05-21 00:00")),
63 interval
<ptime
>::right_open(
64 time_from_string("2008-05-20 22:15"),
65 time_from_string("2008-05-21 00:30")),
69 interval_map
<ptime
, GuestSetT
>::iterator it
= party
.begin();
70 cout
<< "----- History of party guests -------------------------\n";
71 while(it
!= party
.end())
73 interval
<ptime
>::type when
= it
->first
;
74 // Who is at the party within the time interval 'when' ?
75 GuestSetT who
= (*it
++).second
;
76 cout
<< when
<< ": " << who
<< endl
;
81 //------------------------------------------------------------------------------
83 //------------------------------------------------------------------------------
85 typedef interval_map
<ptime
, GuestSetT
> PartyHistory
;
87 typedef PartyHistory::segment_type SegmentT
;
89 SegmentT
episode(const char* from
, const char* to
, GuestSetT guests
)
91 return make_pair( interval
<ptime
>
92 ::right_open( time_from_string(from
)
93 , time_from_string(to
) )
97 PartyHistory
check_party()
100 mary_harry
.insert("Mary");
101 mary_harry
.insert("Harry");
103 GuestSetT diana_susan
;
104 diana_susan
.insert("Diana");
105 diana_susan
.insert("Susan");
108 peter
.insert("Peter");
110 GuestSetT Diana_Harry_Mary_Susan
= mary_harry
+ diana_susan
;
111 GuestSetT Diana_Harry_Mary_Peter_Susan
= Diana_Harry_Mary_Susan
+ peter
;
112 GuestSetT Diana_Peter_Susan
= Diana_Harry_Mary_Peter_Susan
- mary_harry
;
116 party
+= episode("2008-05-20 19:30", "2008-05-20 20:10", mary_harry
);
117 party
+= episode("2008-05-20 20:10", "2008-05-20 22:15", Diana_Harry_Mary_Susan
);
118 party
+= episode("2008-05-20 22:15", "2008-05-20 23:00", Diana_Harry_Mary_Peter_Susan
);
119 party
+= episode("2008-05-20 23:00", "2008-05-21 00:00", Diana_Peter_Susan
);
120 party
+= episode("2008-05-21 00:00", "2008-05-21 00:30", peter
);
125 BOOST_AUTO_TEST_CASE(icl_example_boost_party
)
127 PartyHistory party1
= boost_party();
128 PartyHistory party2
= check_party();
129 bool party_equality
= (party1
==party2
);
130 BOOST_CHECK(party_equality
);
131 //BOOST_CHECK_EQUAL(boost_party(), check_party());