summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/interprocess/test/unordered_test.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
commit483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch)
treee5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/boost/libs/interprocess/test/unordered_test.cpp
parentInitial commit. (diff)
downloadceph-upstream.tar.xz
ceph-upstream.zip
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/interprocess/test/unordered_test.cpp')
-rw-r--r--src/boost/libs/interprocess/test/unordered_test.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/boost/libs/interprocess/test/unordered_test.cpp b/src/boost/libs/interprocess/test/unordered_test.cpp
new file mode 100644
index 00000000..e8995e0f
--- /dev/null
+++ b/src/boost/libs/interprocess/test/unordered_test.cpp
@@ -0,0 +1,100 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2007-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/interprocess for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#include <boost/interprocess/detail/config_begin.hpp>
+#include <boost/interprocess/managed_shared_memory.hpp>
+#include <boost/interprocess/allocators/allocator.hpp>
+#include "get_process_id_name.hpp"
+
+//<-
+//Shield against external warnings
+#include <boost/interprocess/detail/config_external_begin.hpp>
+//->
+
+#include <boost/unordered_map.hpp>
+#include <boost/unordered_set.hpp>
+
+//<-
+#include <boost/interprocess/detail/config_external_end.hpp>
+//->
+
+#include <functional> //std::equal_to
+#include <boost/functional/hash.hpp> //boost::hash
+
+namespace bip = boost::interprocess;
+
+typedef bip::allocator<int, bip::managed_shared_memory::segment_manager> ShmemAllocator;
+typedef boost::unordered_set<int, boost::hash<int>, std::equal_to<int>, ShmemAllocator> MyUnorderedSet;
+typedef boost::unordered_multiset<int, boost::hash<int>, std::equal_to<int>, ShmemAllocator> MyUnorderedMultiSet;
+
+int main()
+{
+ //Remove any other old shared memory from the system
+ bip::shared_memory_object::remove(bip::test::get_process_id_name());
+ try {
+ bip::managed_shared_memory shm(bip::create_only, bip::test::get_process_id_name(), 65536);
+
+ //Elements to be inserted in unordered containers
+ const int elements[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+ const int elements_size = sizeof(elements)/sizeof(elements[0]);
+
+ MyUnorderedSet *myset =
+ shm.construct<MyUnorderedSet>(bip::anonymous_instance)
+ ( elements_size
+ , MyUnorderedSet::hasher()
+ , MyUnorderedSet::key_equal()
+ , shm.get_allocator<int>());
+ MyUnorderedMultiSet *mymset =
+ shm.construct<MyUnorderedMultiSet>(bip::anonymous_instance)
+ ( elements_size
+ , MyUnorderedSet::hasher()
+ , MyUnorderedSet::key_equal()
+ , shm.get_allocator<int>());
+
+ //Insert elements and check sizes
+ myset->insert((&elements[0]), (&elements[elements_size]));
+ myset->insert((&elements[0]), (&elements[elements_size]));
+ mymset->insert((&elements[0]), (&elements[elements_size]));
+ mymset->insert((&elements[0]), (&elements[elements_size]));
+
+ if(myset->size() != (unsigned int)elements_size)
+ return 1;
+ if(mymset->size() != (unsigned int)elements_size*2)
+ return 1;
+
+ //Destroy elements and check sizes
+ myset->clear();
+ mymset->clear();
+
+ if(!myset->empty())
+ return 1;
+ if(!mymset->empty())
+ return 1;
+
+ //Destroy elements and check if memory has been deallocated
+ shm.destroy_ptr(myset);
+ shm.destroy_ptr(mymset);
+
+ shm.shrink_to_fit_indexes();
+ if(!shm.all_memory_deallocated())
+ return 1;
+
+ }
+ catch(...){
+ //Remove shared memory from the system
+ bip::shared_memory_object::remove(bip::test::get_process_id_name());
+ throw;
+ }
+ //Remove shared memory from the system
+ bip::shared_memory_object::remove(bip::test::get_process_id_name());
+ return 0;
+}
+
+#include <boost/interprocess/detail/config_end.hpp>