Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_33_1/libs/multi_index/test/test_modifiers.cpp @ 25

Last change on this file since 25 was 12, checked in by landauf, 18 years ago

added boost

File size: 4.7 KB
Line 
1/* Boost.MultiIndex test for modifier memfuns.
2 *
3 * Copyright 2003-2005 Joaquín M López Muñoz.
4 * Distributed under the Boost Software License, Version 1.0.
5 * (See accompanying file LICENSE_1_0.txt or copy at
6 * http://www.boost.org/LICENSE_1_0.txt)
7 *
8 * See http://www.boost.org/libs/multi_index for library home page.
9 */
10
11#include "test_modifiers.hpp"
12
13#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
14#include <vector>
15#include "pre_multi_index.hpp"
16#include "employee.hpp"
17#include <boost/test/test_tools.hpp>
18
19using namespace boost::multi_index;
20
21void test_modifiers()
22{
23  employee_set              es;
24  employee_set_by_name&     i1=get<name>(es);
25  employee_set_by_age&      i2=get<age>(es);
26  employee_set_as_inserted& i3=get<as_inserted>(es);
27  employee_set_by_ssn&      i4=get<ssn>(es);
28
29  es.insert(employee(0,"Joe",31,1123));
30  BOOST_CHECK(es.insert(employee(0,"Joe",31,1123)).second==false);
31  BOOST_CHECK(i1.insert(employee(0,"Joe Jr.",5,2563)).second==false);
32  BOOST_CHECK(i2.insert(employee(1,"Victor",5,1123)).second==false);
33  BOOST_CHECK(i3.insert(i3.begin(),employee(1,"Victor",5,1123)).second
34                ==false);
35  BOOST_CHECK(i3.push_front(employee(0,"Joe Jr.",5,2563)).second==false);
36  BOOST_CHECK(i3.push_back(employee(0,"Joe Jr.",5,2563)).second==false);
37
38  employee_set_by_name::iterator it1=i1.find("Joe");
39  i1.insert(it1,employee(1,"Joe Jr.",5,2563));
40  BOOST_CHECK(es.size()==2);
41
42  employee_set_by_age::iterator it2=i2.find(31);
43  i2.insert(it2,employee(2,"Grandda Joe",64,7881));
44  BOOST_CHECK(es.size()==3);
45
46  employee_set_as_inserted::iterator it3=i3.begin();
47  i3.insert(it3,100,employee(3,"Judy",39,6201));
48  BOOST_CHECK(es.size()==4);
49
50  es.erase(employee(1,"Joe Jr.",5,2563));
51  BOOST_CHECK(i2.size()==3&&i3.size()==3);
52
53  BOOST_CHECK(i1.erase("Judy")==1);
54  BOOST_CHECK(es.size()==2&&i2.size()==2);
55
56  BOOST_CHECK(i2.erase(it2)->age==64);
57  BOOST_CHECK(es.size()==1&&i1.size()==1);
58
59  i3.pop_front();
60  BOOST_CHECK(es.size()==0&&i2.size()==0);
61
62  es.insert(employee(0,"Joe",31,1123));
63  BOOST_CHECK(i1.erase(i1.begin())==i1.end());
64  BOOST_CHECK(i1.size()==0);
65
66  es.insert(employee(0,"Joe",31,1123));
67  es.insert(employee(1,"Jack",31,5032));
68  BOOST_CHECK(i2.erase(31)==2);
69  BOOST_CHECK(i2.size()==0);
70
71  i3.push_front(employee(1,"Jack",31,5032));
72  i3.push_back(employee(0,"Joe",31,1123));
73  BOOST_CHECK(i3.front()==employee(1,"Jack",31,5032));
74  BOOST_CHECK(i3.back()==employee(0,"Joe",31,1123));
75
76  i3.pop_back();
77  BOOST_CHECK(i3.back()==employee(1,"Jack",31,5032));
78  BOOST_CHECK(es.size()==1);
79
80  i3.pop_front();
81  BOOST_CHECK(es.size()==0);
82
83  std::vector<employee> ve;
84  ve.push_back(employee(3,"Anna",31,5388));
85  ve.push_back(employee(1,"Rachel",27,9012));
86  ve.push_back(employee(2,"Agatha",40,1520));
87
88  i1.insert(ve.begin(),ve.end());
89  BOOST_CHECK(i2.size()==3);
90
91  BOOST_CHECK(i4.erase(i4.begin(),i4.end())==i4.end());
92  BOOST_CHECK(es.size()==0);
93
94  i2.insert(ve.begin(),ve.end());
95  BOOST_CHECK(i3.size()==3);
96
97  BOOST_CHECK(*(i3.erase(i3.begin()))==employee(1,"Rachel",27,9012));
98  BOOST_CHECK(i3.erase(i3.begin(),i3.end())==i3.end());
99  BOOST_CHECK(es.size()==0);
100
101  i3.insert(i3.end(),ve.begin(),ve.end());
102  BOOST_CHECK(es.size()==3);
103
104  BOOST_CHECK(es.erase(es.begin(),es.end())==es.end());
105  BOOST_CHECK(i2.size()==0);
106
107  es.insert(employee(0,"Joe",31,1123));
108  es.insert(employee(1,"Robert",27,5601));
109  es.insert(employee(2,"John",40,7889));
110  es.insert(employee(3,"Albert",20,9012));
111  es.insert(employee(4,"John",57,1002));
112
113  employee_set es_backup(es);
114
115  employee_set es2;
116  es2.insert(employee(3,"Anna",31,5388));
117  es2.insert(employee(1,"Rachel",27,9012));
118  es2.insert(employee(2,"Agatha",40,1520));
119
120  employee_set es2_backup(es2);
121
122  i1.swap(get<1>(es2));
123  BOOST_CHECK(es==es2_backup&&es2==es_backup);
124
125  i2.swap(get<2>(es2));
126  BOOST_CHECK(es==es_backup&&es2==es2_backup);
127
128  i3.swap(get<3>(es2));
129  BOOST_CHECK(es==es2_backup&&es2==es_backup);
130
131#if defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
132  ::boost::multi_index::detail::swap(i1,get<1>(es2));
133#else
134  using std::swap;
135  swap(i1,get<1>(es2));
136#endif
137
138  BOOST_CHECK(es==es_backup&&es2==es2_backup);
139
140#if defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
141  ::boost::multi_index::detail::swap(i2,get<2>(es2));
142#else
143  using std::swap;
144  swap(i2,get<2>(es2));
145#endif
146
147  BOOST_CHECK(es==es2_backup&&es2==es_backup);
148
149#if defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
150  ::boost::multi_index::detail::swap(i3,get<3>(es2));
151#else
152  using std::swap;
153  swap(i3,get<3>(es2));
154#endif
155
156  BOOST_CHECK(es==es_backup&&es2==es2_backup);
157
158  i3.clear();
159  BOOST_CHECK(i3.size()==0);
160
161  es=es2;
162  i4.clear();
163  BOOST_CHECK(i4.size()==0);
164
165  es2.clear();
166  BOOST_CHECK(es2.size()==0);
167}
Note: See TracBrowser for help on using the repository browser.