From c272bff939f73d06d3c76f2235638ba477d247fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Sun, 6 Mar 2022 22:40:27 +0100 Subject: [PATCH] Fixes #167 ("Invalid string stored in vector") --- test/string_test.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/test/string_test.cpp b/test/string_test.cpp index e202762..c389e5c 100644 --- a/test/string_test.cpp +++ b/test/string_test.cpp @@ -269,6 +269,44 @@ bool test_expand_bwd() return test::test_all_expand_bwd(); } +bool vector_of_strings_test() +{ + using namespace boost::interprocess; + typedef allocator ShmCharAllocator; + typedef allocator ShmIntAllocator; + typedef basic_string, ShmCharAllocator > ShmString; + typedef allocator ShmStringAllocator; + + const char *memoryName = "test_memory"; + shared_memory_object::remove(memoryName); + managed_shared_memory shm(create_only, memoryName, 1024 * 1024); + shared_memory_object::remove(memoryName); + + ShmStringAllocator stringAllocator(shm.get_segment_manager()); + ShmIntAllocator intAllocator(shm.get_segment_manager()); + + vector vectorOfStrings(stringAllocator); + vector vectorOfInts(intAllocator); + + { + ShmString z("aaaaaaaa", stringAllocator); + vectorOfStrings.push_back(z); + vectorOfInts.push_back(7); + } + { + ShmString z("ccccccccccccccccccccccc", stringAllocator); + vectorOfStrings.push_back(z); + } + { + ShmString z("bbbb", stringAllocator); + vectorOfStrings.push_back(z); + } + + return std::strcmp(vectorOfStrings.at(0).c_str(), "aaaaaaaa") == 0 + && std::strcmp(vectorOfStrings.at(1).c_str(), "ccccccccccccccccccccccc") == 0 + && std::strcmp(vectorOfStrings.at(2).c_str(), "bbbb") == 0; +} + int main() { if(string_test()){ @@ -282,6 +320,9 @@ int main() if(!test_expand_bwd()) return 1; + if(!vector_of_strings_test()) + return 1; + return 0; }