Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/multi_index/test/test_serialization2.cpp @ 29

Last change on this file since 29 was 29, checked in by landauf, 16 years ago

updated boost from 1_33_1 to 1_34_1

File size: 3.8 KB
Line 
1/* Boost.MultiIndex test for serialization, part 2.
2 *
3 * Copyright 2003-2006 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_serialization.hpp"
12#include "test_serialization_template.hpp"
13
14#include <boost/multi_index/hashed_index.hpp>
15#include <boost/multi_index/ordered_index.hpp>
16#include <boost/multi_index/sequenced_index.hpp>
17#include <boost/multi_index/random_access_index.hpp>
18#include <boost/multi_index/key_extractors.hpp>
19#include "pair_of_ints.hpp"
20
21using namespace boost::multi_index;
22
23void test_hashed_index_serialization()
24{
25  const int N=100;
26  const int SHUFFLE=10232;
27
28  typedef multi_index_container<
29    int,
30    indexed_by<
31      hashed_unique<identity<int> >,
32      sequenced<>
33    >
34  > hashed_set;
35
36  typedef hashed_set::iterator       iterator;
37  typedef hashed_set::local_iterator local_iterator;
38
39  hashed_set hs;
40
41  for(int i=0;i<N;++i){
42    hs.insert(i*SHUFFLE);
43  }
44
45  std::ostringstream oss;
46  {
47    boost::archive::text_oarchive oa(oss);
48    oa<<const_cast<const hashed_set&>(hs);
49
50    std::vector<iterator> its(N);
51    for(int i=0;i<N;++i){
52      iterator it=hs.find(i*SHUFFLE);
53      its.push_back(it);
54      oa<<const_cast<const iterator&>(its.back());
55    }
56    iterator it=hs.end();
57    oa<<const_cast<const iterator&>(it);
58
59    std::vector<local_iterator> lits(2*N);
60    for(std::size_t buc=0;buc<hs.bucket_count();++buc){
61      for(local_iterator lit=hs.begin(buc),lit_end=hs.end(buc);
62          lit!=lit_end;++lit){
63        oa<<*lit;
64        lits.push_back(lit);
65        oa<<const_cast<const local_iterator&>(lits.back());
66      }
67      local_iterator lit2=hs.end(buc);
68      lits.push_back(lit2);
69      oa<<const_cast<const local_iterator&>(lits.back());
70    }
71  }
72
73  hashed_set hs2;
74  std::istringstream iss(oss.str());
75  boost::archive::text_iarchive ia(iss);
76  ia>>hs2;
77  BOOST_CHECK(get<1>(hs)==get<1>(hs2));
78
79  for(int j=0;j<N;++j){
80    iterator it;
81    ia>>it;
82    BOOST_CHECK(*it==j*SHUFFLE);
83  }
84  iterator it;
85  ia>>it;
86  BOOST_CHECK(it==hs2.end());
87
88  for(std::size_t buc=0;buc<hs2.bucket_count();++buc){
89    for(std::size_t k=0;k<hs2.bucket_size(buc);++k){
90      int n;
91      local_iterator it;
92      ia>>n;
93      ia>>it;
94      BOOST_CHECK(*it==n);
95    }
96    local_iterator it2;
97    ia>>it2;
98    BOOST_CHECK(it2==hs2.end(buc));
99  }
100}
101
102void test_serialization2()
103{
104  {
105    typedef multi_index_container<
106      pair_of_ints,
107      indexed_by<
108        ordered_unique<
109          BOOST_MULTI_INDEX_MEMBER(pair_of_ints,int,first)
110        >,
111        ordered_non_unique<
112          BOOST_MULTI_INDEX_MEMBER(pair_of_ints,int,second)
113        >,
114        random_access<>,
115        sequenced<>
116      >
117    > multi_index_t;
118
119    multi_index_t m;
120    test_serialization(m);
121
122    m.insert(pair_of_ints(4,0));
123    test_serialization(m);
124
125    m.insert(pair_of_ints(3,1));
126    m.insert(pair_of_ints(2,1));
127    test_serialization(m);
128
129    m.insert(pair_of_ints(1,1));
130    test_serialization(m);
131
132    m.insert(pair_of_ints(0,0));
133    test_serialization(m);
134
135    m.insert(pair_of_ints(5,1));
136    m.insert(pair_of_ints(7,1));
137    m.insert(pair_of_ints(6,1));
138    test_serialization(m);
139   
140    m.insert(pair_of_ints(8,1));
141    m.insert(pair_of_ints(9,1));
142    m.insert(pair_of_ints(12,1));
143    m.insert(pair_of_ints(11,1));
144    m.insert(pair_of_ints(10,1));
145    test_serialization(m);
146
147    /* testcase for bug reported at
148     * http://lists.boost.org/boost-users/2006/05/19362.php
149     */
150
151    m.clear();
152    m.insert(pair_of_ints(0,0));
153    m.insert(pair_of_ints(1,0));
154    m.insert(pair_of_ints(2,1));
155    m.insert(pair_of_ints(4,2));
156    m.insert(pair_of_ints(3,2));
157    test_serialization(m);
158  }
159  test_hashed_index_serialization();
160}
Note: See TracBrowser for help on using the repository browser.