• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Boost.MultiIndex test for capacity memfuns.
2  *
3  * Copyright 2003-2015 Joaquin M Lopez Munoz.
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_capacity.hpp"
12 
13 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
14 #include "pre_multi_index.hpp"
15 #include "employee.hpp"
16 #include <boost/detail/lightweight_test.hpp>
17 
18 using namespace boost::multi_index;
19 
test_capacity()20 void test_capacity()
21 {
22   employee_set es;
23 
24   es.insert(employee(0,"Joe",31,1123));
25   es.insert(employee(1,"Robert",27,5601));
26   es.insert(employee(2,"John",40,7889));
27   es.insert(employee(3,"Albert",20,9012));
28   es.insert(employee(4,"John",57,1002));
29 
30   BOOST_TEST(!es.empty());
31   BOOST_TEST(es.size()==5);
32   BOOST_TEST(es.size()<=es.max_size());
33 
34   es.erase(es.begin());
35   BOOST_TEST(!get<name>(es).empty());
36   BOOST_TEST(get<name>(es).size()==4);
37   BOOST_TEST(get<name>(es).size()<=get<name>(es).max_size());
38 
39   es.erase(es.begin());
40   BOOST_TEST(!get<as_inserted>(es).empty());
41   BOOST_TEST(get<as_inserted>(es).size()==3);
42   BOOST_TEST(get<as_inserted>(es).size()<=get<as_inserted>(es).max_size());
43 
44   multi_index_container<int,indexed_by<sequenced<> > > ss;
45 
46   ss.resize(10);
47   BOOST_TEST(ss.size()==10);
48   BOOST_TEST(ss.size()<=ss.max_size());
49 
50   ss.resize(20,666);
51   BOOST_TEST(ss.size()==20);
52   BOOST_TEST(ss.back()==666);
53 
54   ss.resize(5,10);
55   BOOST_TEST(ss.size()==5);
56 
57   ss.resize(4);
58   BOOST_TEST(ss.size()==4);
59 
60   multi_index_container<int,indexed_by<random_access<> > > rs;
61 
62   rs.resize(10);
63   BOOST_TEST(rs.size()==10);
64   BOOST_TEST(rs.size()<=rs.max_size());
65   BOOST_TEST(rs.size()<=rs.capacity());
66 
67   rs.resize(20,666);
68   BOOST_TEST(rs.size()==20);
69   BOOST_TEST(rs.back()==666);
70   BOOST_TEST(rs.size()<=rs.capacity());
71 
72   employee_set::size_type c=rs.capacity();
73   rs.resize(10,20);
74   BOOST_TEST(rs.size()==10);
75   BOOST_TEST(rs.capacity()==c);
76 
77   rs.resize(5);
78   BOOST_TEST(rs.size()==5);
79   BOOST_TEST(rs.capacity()==c);
80 
81   rs.reserve(100);
82   BOOST_TEST(rs.size()==5);
83   BOOST_TEST(rs.capacity()>=100);
84 
85   c=rs.capacity();
86   rs.reserve(99);
87   BOOST_TEST(rs.size()==5);
88   BOOST_TEST(rs.capacity()==c);
89 
90   rs.shrink_to_fit();
91   BOOST_TEST(rs.size()==5);
92   BOOST_TEST(rs.capacity()==rs.size());
93 
94   rs.clear();
95   rs.shrink_to_fit();
96   BOOST_TEST(rs.capacity()==0);
97 }
98