]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/icl/test/ex_boost_party_/ex_boost_party.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / icl / test / ex_boost_party_ / ex_boost_party.cpp
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
9
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.
14
15 //------------------------------------------------------------------------------
16 // begin example code. return value added to function boost_party
17 //------------------------------------------------------------------------------
18 #include <boost/icl/ptime.hpp>
19 #include <iostream>
20 #include <boost/icl/interval_map.hpp>
21
22 using namespace std;
23 using namespace boost::posix_time;
24 using namespace boost::icl;
25
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;
30
31 interval_map<ptime, GuestSetT> boost_party()
32 {
33 GuestSetT mary_harry;
34 mary_harry.insert("Mary");
35 mary_harry.insert("Harry");
36
37 GuestSetT diana_susan;
38 diana_susan.insert("Diana");
39 diana_susan.insert("Susan");
40
41 GuestSetT peter;
42 peter.insert("Peter");
43
44 // A party is an interval map that maps time intervals to sets of guests
45 interval_map<ptime, GuestSetT> party;
46
47 party.add( // add and element
48 make_pair(
49 interval<ptime>::right_open(
50 time_from_string("2008-05-20 19:30"),
51 time_from_string("2008-05-20 23:00")),
52 mary_harry));
53
54 party += // element addition can also be done via operator +=
55 make_pair(
56 interval<ptime>::right_open(
57 time_from_string("2008-05-20 20:10"),
58 time_from_string("2008-05-21 00:00")),
59 diana_susan);
60
61 party +=
62 make_pair(
63 interval<ptime>::right_open(
64 time_from_string("2008-05-20 22:15"),
65 time_from_string("2008-05-21 00:30")),
66 peter);
67
68
69 interval_map<ptime, GuestSetT>::iterator it = party.begin();
70 cout << "----- History of party guests -------------------------\n";
71 while(it != party.end())
72 {
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;
77 }
78
79 return party;
80 }
81 //------------------------------------------------------------------------------
82 // end example code
83 //------------------------------------------------------------------------------
84
85 typedef interval_map<ptime, GuestSetT> PartyHistory;
86
87 typedef PartyHistory::segment_type SegmentT;
88
89 SegmentT episode(const char* from, const char* to, GuestSetT guests)
90 {
91 return make_pair( interval<ptime>
92 ::right_open( time_from_string(from)
93 , time_from_string(to) )
94 , guests);
95 }
96
97 PartyHistory check_party()
98 {
99 GuestSetT mary_harry;
100 mary_harry.insert("Mary");
101 mary_harry.insert("Harry");
102
103 GuestSetT diana_susan;
104 diana_susan.insert("Diana");
105 diana_susan.insert("Susan");
106
107 GuestSetT peter;
108 peter.insert("Peter");
109
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;
113
114 PartyHistory party;
115
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);
121
122 return party;
123 }
124
125 BOOST_AUTO_TEST_CASE(icl_example_boost_party)
126 {
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());
132 }
133
134