]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/interprocess/test/unordered_test.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / interprocess / test / unordered_test.cpp
1 //////////////////////////////////////////////////////////////////////////////
2 //
3 // (C) Copyright Ion Gaztanaga 2007-2012. Distributed under the Boost
4 // Software License, Version 1.0. (See accompanying file
5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // See http://www.boost.org/libs/interprocess for documentation.
8 //
9 //////////////////////////////////////////////////////////////////////////////
10
11 #include <boost/interprocess/managed_shared_memory.hpp>
12 #include <boost/interprocess/allocators/allocator.hpp>
13 #include "get_process_id_name.hpp"
14
15 //<-
16 //Shield against external warnings
17 #include <boost/interprocess/detail/config_external_begin.hpp>
18 //->
19
20 #include <boost/unordered_map.hpp>
21 #include <boost/unordered_set.hpp>
22
23 //<-
24 #include <boost/interprocess/detail/config_external_end.hpp>
25 //->
26
27 #include <functional> //std::equal_to
28 #include <boost/container_hash/hash.hpp> //boost::hash
29
30 namespace bip = boost::interprocess;
31
32 typedef bip::allocator<int, bip::managed_shared_memory::segment_manager> ShmemAllocator;
33 typedef boost::unordered_set<int, boost::hash<int>, std::equal_to<int>, ShmemAllocator> MyUnorderedSet;
34 typedef boost::unordered_multiset<int, boost::hash<int>, std::equal_to<int>, ShmemAllocator> MyUnorderedMultiSet;
35
36 int main()
37 {
38 //Remove any other old shared memory from the system
39 bip::shared_memory_object::remove(bip::test::get_process_id_name());
40 BOOST_TRY {
41 bip::managed_shared_memory shm(bip::create_only, bip::test::get_process_id_name(), 65536);
42
43 //Elements to be inserted in unordered containers
44 const int elements[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
45 const std::size_t elements_size = sizeof(elements)/sizeof(elements[0]);
46
47 MyUnorderedSet *myset =
48 shm.construct<MyUnorderedSet>(bip::anonymous_instance)
49 ( elements_size
50 , MyUnorderedSet::hasher()
51 , MyUnorderedSet::key_equal()
52 , shm.get_allocator<int>());
53 MyUnorderedMultiSet *mymset =
54 shm.construct<MyUnorderedMultiSet>(bip::anonymous_instance)
55 ( elements_size
56 , MyUnorderedSet::hasher()
57 , MyUnorderedSet::key_equal()
58 , shm.get_allocator<int>());
59
60 //Insert elements and check sizes
61 myset->insert((&elements[0]), (&elements[std::ptrdiff_t(elements_size)]));
62 myset->insert((&elements[0]), (&elements[std::ptrdiff_t(elements_size)]));
63 mymset->insert((&elements[0]), (&elements[std::ptrdiff_t(elements_size)]));
64 mymset->insert((&elements[0]), (&elements[std::ptrdiff_t(elements_size)]));
65
66 if(myset->size() != elements_size)
67 return 1;
68 if(mymset->size() != elements_size*2u)
69 return 1;
70
71 //Destroy elements and check sizes
72 myset->clear();
73 mymset->clear();
74
75 if(!myset->empty())
76 return 1;
77 if(!mymset->empty())
78 return 1;
79
80 //Destroy elements and check if memory has been deallocated
81 shm.destroy_ptr(myset);
82 shm.destroy_ptr(mymset);
83
84 shm.shrink_to_fit_indexes();
85 if(!shm.all_memory_deallocated())
86 return 1;
87
88 }
89 BOOST_CATCH(...){
90 //Remove shared memory from the system
91 bip::shared_memory_object::remove(bip::test::get_process_id_name());
92 BOOST_RETHROW
93 } BOOST_CATCH_END
94 //Remove shared memory from the system
95 bip::shared_memory_object::remove(bip::test::get_process_id_name());
96 return 0;
97 }