GCC Code Coverage Report


Directory: ./
File: tests/unit_tests.cpp
Date: 2022-06-30 06:29:57
Exec Total Coverage
Lines: 484 495 97.8%
Branches: 781 1964 39.8%

Line Branch Exec Source
1 /**
2 * @file unit_tests.cpp
3 * @author Maximilien Naveau (maximilien.naveau@gmail.com)
4 * @license License BSD-3-Clause
5 * @copyright Copyright (c) 2019, New York University and Max Planck
6 * Gesellschaft.
7 * @date 2019-05-22
8 *
9 * @brief Shared memroy API unittests.
10 */
11
12 #include <unistd.h>
13
14 #include <cstdlib>
15 #include <sstream>
16 #include <thread>
17
18 #include "gtest/gtest.h"
19 #include "shared_memory/array.hpp"
20 #include "shared_memory/condition_variable.hpp"
21 #include "shared_memory/demos/four_int_values.hpp"
22 #include "shared_memory/demos/item.hpp"
23 #include "shared_memory/exchange_manager_consumer.hpp"
24 #include "shared_memory/exchange_manager_producer.hpp"
25 #include "shared_memory/lock.hpp"
26 #include "shared_memory/locked_condition_variable.hpp"
27 #include "shared_memory/mutex.hpp"
28 #include "shared_memory/shared_memory.hpp"
29 #include "shared_memory/tests/tests.h"
30
31 // set in the CMakeLists.txt file
32 // see tests/support/tests_executable.cpp
33
1/2
✓ Branch 2 taken 28 times.
✗ Branch 3 not taken.
28 static std::string PATH_TO_EXECUTABLE = SHM_PATH_TO_SUPPORT_EXE;
34
35 static unsigned int TIME_SLEEP = 20000; // microseconds
36
37 57 static inline void clear_memory()
38 {
39 // destroy the condition variables and mutex
40 {
41 // Locked condition variables
42
1/2
✓ Branch 2 taken 57 times.
✗ Branch 3 not taken.
114 std::stringstream cond_var_name1;
43
2/4
✓ Branch 1 taken 57 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 57 times.
✗ Branch 5 not taken.
57 cond_var_name1 << shared_memory_test::segment_id << "_"
44
1/2
✓ Branch 1 taken 57 times.
✗ Branch 2 not taken.
57 << shared_memory_test::concurrent_1;
45
1/2
✓ Branch 2 taken 57 times.
✗ Branch 3 not taken.
114 std::stringstream cond_var_name2;
46
2/4
✓ Branch 1 taken 57 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 57 times.
✗ Branch 5 not taken.
57 cond_var_name2 << shared_memory_test::segment_id << "_"
47
1/2
✓ Branch 1 taken 57 times.
✗ Branch 2 not taken.
57 << shared_memory_test::concurrent_2;
48
1/2
✓ Branch 1 taken 57 times.
✗ Branch 2 not taken.
114 shared_memory::LockedConditionVariable cond_var1(cond_var_name1.str(),
49
1/2
✓ Branch 1 taken 57 times.
✗ Branch 2 not taken.
114 true);
50
1/2
✓ Branch 1 taken 57 times.
✗ Branch 2 not taken.
114 shared_memory::LockedConditionVariable cond_var2(cond_var_name2.str(),
51
1/2
✓ Branch 1 taken 57 times.
✗ Branch 2 not taken.
114 true);
52 shared_memory::LockedConditionVariable cond_var(
53
2/4
✓ Branch 1 taken 57 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 57 times.
✗ Branch 5 not taken.
114 shared_memory_test::segment_id, true);
54
55 // Mutex
56
2/4
✓ Branch 1 taken 57 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 57 times.
✗ Branch 5 not taken.
57 shared_memory::Mutex::clean(shared_memory_test::segment_mutex_id);
57
58 // Condition variables
59 shared_memory::ConditionVariable condition(
60
2/4
✓ Branch 1 taken 57 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 57 times.
✗ Branch 5 not taken.
57 shared_memory_test::segment_cv_id, true);
61 }
62
63 57 shared_memory::clear_shared_memory(shared_memory_test::segment_id);
64 57 }
65
66 56 class SharedMemoryTests : public ::testing::Test
67 {
68 protected:
69 28 void SetUp()
70 {
71 28 clear_memory();
72 28 shared_memory::set_verbose(false);
73
1/2
✓ Branch 2 taken 28 times.
✗ Branch 3 not taken.
56 shared_memory::get_segment_mutex(shared_memory_test::segment_id)
74 28 .unlock();
75 28 threads_.clear();
76 28 }
77
78 28 void TearDown()
79 {
80
2/2
✓ Branch 1 taken 14 times.
✓ Branch 2 taken 28 times.
42 for (unsigned int i = 0; i < threads_.size(); ++i)
81 {
82
1/2
✓ Branch 2 taken 14 times.
✗ Branch 3 not taken.
14 if (threads_[i].joinable())
83 {
84 14 threads_[i].join();
85 }
86 }
87 28 threads_.clear();
88 28 clear_memory();
89 28 }
90
91 26 static void _call_executable_blocking(int action)
92 {
93
1/2
✓ Branch 2 taken 26 times.
✗ Branch 3 not taken.
52 std::stringstream s;
94
4/8
✓ Branch 1 taken 26 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 26 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 26 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 26 times.
✗ Branch 11 not taken.
26 s << PATH_TO_EXECUTABLE << " " << action << std::ends;
95
2/4
✓ Branch 1 taken 26 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 26 times.
✗ Branch 6 not taken.
26 int r = std::system(s.str().c_str());
96 (void)(r); // avoiding compilation warning
97 26 }
98
99 14 void _call_executable_non_blocking(int action)
100 {
101
1/2
✓ Branch 1 taken 14 times.
✗ Branch 2 not taken.
14 threads_.emplace_back(
102
1/2
✓ Branch 1 taken 14 times.
✗ Branch 2 not taken.
28 std::thread(&SharedMemoryTests::_call_executable_blocking, action));
103 14 }
104
105 std::vector<std::thread> threads_;
106 };
107
108 class DISABLED_SharedMemoryTests : public ::testing::Test
109 {
110 protected:
111 // Dummy methodes for compilation purposes
112 static void _call_executable_blocking(int)
113 {
114 }
115 void _call_executable_non_blocking(int)
116 {
117 }
118 };
119
120
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, double_test)
121 {
122
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_blocking(shared_memory_test::set_double);
123
124 double value;
125
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::get(
126 shared_memory_test::segment_id, shared_memory_test::object_id, value);
127
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
1 ASSERT_EQ(value, shared_memory_test::test_double);
128 }
129
130
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, non_existing_segment_exception)
131 {
132
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 clear_memory();
133 1 bool thrown = false;
134 double value;
135 try
136 {
137
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
1 shared_memory::get<double>(shared_memory_test::segment_id,
138 shared_memory_test::object_id,
139 value,
140 false);
141 }
142 2 catch (const shared_memory::Non_existing_segment_exception &)
143 {
144 1 thrown = true;
145 }
146
3/14
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
1 ASSERT_TRUE(thrown);
147 }
148
149
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, int_test)
150 {
151
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_blocking(shared_memory_test::set_int);
152
153 int value;
154
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::get(
155 shared_memory_test::segment_id, shared_memory_test::object_id, value);
156
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
1 ASSERT_EQ(value, shared_memory_test::test_int);
157 }
158
159
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_float)
160 {
161
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_blocking(shared_memory_test::set_float);
162
163 float value;
164
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::get(
165 shared_memory_test::segment_id, shared_memory_test::object_id, value);
166
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
1 ASSERT_EQ(value, shared_memory_test::test_float);
167 }
168
169
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_string)
170 {
171
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_blocking(shared_memory_test::set_string);
172
173 2 std::string str;
174
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::get(
175 shared_memory_test::segment_id, shared_memory_test::object_id, str);
176
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
1 ASSERT_EQ(str, shared_memory_test::test_string);
177 }
178
179
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_array)
180 {
181
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_blocking(shared_memory_test::set_double_array);
182
183 double a[shared_memory_test::test_array_size];
184
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::get(shared_memory_test::segment_id,
185 shared_memory_test::object_id,
186 a,
187 std::size_t{shared_memory_test::test_array_size});
188
189
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
5 for (unsigned int i = 0; i < shared_memory_test::test_array_size; i++)
190 {
191
3/12
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 4 times.
✗ Branch 20 not taken.
4 ASSERT_EQ(a[i], shared_memory_test::test_array[i]);
192 }
193 }
194
195
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_vector)
196 {
197
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_blocking(shared_memory_test::set_vector);
198
199
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<double> v(shared_memory_test::test_array_size);
200
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::get(
201 shared_memory_test::segment_id, shared_memory_test::object_id, v);
202
203
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
1 ASSERT_EQ(v.size(), shared_memory_test::test_array_size);
204
3/4
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
5 for (unsigned int i = 0; i < shared_memory_test::test_array_size; i++)
205 {
206
3/12
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 4 times.
✗ Branch 21 not taken.
4 ASSERT_EQ(v[i], shared_memory_test::test_array[i]);
207 }
208 }
209
210
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_eigen_vector)
211 {
212
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_blocking(shared_memory_test::set_vector);
213
214
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Eigen::VectorXd v(shared_memory_test::test_array_size);
215
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::get(
216 shared_memory_test::segment_id, shared_memory_test::object_id, v);
217
218
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
1 ASSERT_EQ(v.size(), shared_memory_test::test_array_size);
219
3/4
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
5 for (unsigned int i = 0; i < shared_memory_test::test_array_size; i++)
220 {
221
4/14
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 4 times.
✗ Branch 23 not taken.
4 ASSERT_EQ(v(i), shared_memory_test::test_array[i]);
222 }
223 }
224
225
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_int_double_map)
226 {
227
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_blocking(shared_memory_test::set_int_double_map);
228
229 2 std::map<int, double> m;
230
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 m[shared_memory_test::map_int_keys1] = 0.0;
231
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 m[shared_memory_test::map_int_keys2] = 0.0;
232
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::get(
233 shared_memory_test::segment_id, shared_memory_test::object_id, m);
234
235
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
1 ASSERT_EQ(m.size(), shared_memory_test::test_map_size);
236
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_int_keys1],
237 1 shared_memory_test::map_value_1);
238
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_int_keys2],
239
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory_test::map_value_2);
240 }
241
242
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_string_double_map)
243 {
244
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_blocking(shared_memory_test::set_string_double_map);
245
246 2 std::map<std::string, double> m;
247
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 m[shared_memory_test::map_string_keys1] = 0.0;
248
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 m[shared_memory_test::map_string_keys2] = 0.0;
249
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::get(
250 shared_memory_test::segment_id, shared_memory_test::object_id, m);
251
252
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
1 ASSERT_EQ(m.size(), shared_memory_test::test_map_size);
253
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_string_keys1],
254 1 shared_memory_test::map_value_1);
255
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_string_keys2],
256
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory_test::map_value_2);
257 }
258
259
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_string_vector_double_map)
260 {
261
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_blocking(shared_memory_test::set_string_vector_double_map);
262
263 2 std::map<std::string, std::vector<double>> m;
264
265
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
2 std::vector<double> v1(2);
266 1 v1[0] = 0.0;
267 1 v1[1] = 0.0;
268
269
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
2 std::vector<double> v2(2);
270 1 v2[0] = 0.0;
271 1 v2[1] = 0.0;
272
273
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 m[shared_memory_test::map_string_keys1] = v1;
274
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 m[shared_memory_test::map_string_keys2] = v2;
275
276
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::get(
277 shared_memory_test::segment_id, shared_memory_test::object_id, m);
278
279
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
1 ASSERT_EQ(m.size(), shared_memory_test::test_map_size);
280
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_string_keys1].size(),
281 1 static_cast<unsigned int>(2));
282
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_string_keys2].size(),
283 1 static_cast<unsigned int>(2));
284
285
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_string_keys1][0],
286 1 shared_memory_test::map_value_1);
287
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_string_keys1][1],
288 1 shared_memory_test::map_value_2);
289
290
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_string_keys2][0],
291 1 shared_memory_test::map_value_2);
292
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_string_keys2][1],
293
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory_test::map_value_1);
294 }
295
296
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_string_vector_eigen_map)
297 {
298
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_blocking(shared_memory_test::set_string_vector_eigen_map);
299
300 2 std::map<std::string, Eigen::VectorXd> m;
301
302
4/8
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
2 Eigen::VectorXd v1(2), v2(2);
303
304
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 m[shared_memory_test::map_string_keys1] = v1;
305
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 m[shared_memory_test::map_string_keys2] = v2;
306
307
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::get(
308 shared_memory_test::segment_id, shared_memory_test::object_id, m);
309
310
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
1 ASSERT_EQ(m.size(), shared_memory_test::test_map_size);
311
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_string_keys1].size(), 2);
312
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_string_keys2].size(), 2);
313
314
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_string_keys1][0],
315 1 shared_memory_test::map_value_1);
316
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_string_keys1][1],
317 1 shared_memory_test::map_value_2);
318
319
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_string_keys2][0],
320 1 shared_memory_test::map_value_2);
321
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
1 ASSERT_EQ(m[shared_memory_test::map_string_keys2][1],
322
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory_test::map_value_1);
323 }
324
325
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_memory_overflow)
326 {
327 1 unsigned int max_size = DEFAULT_SHARED_MEMORY_SIZE / sizeof(int) + 1;
328
2/5
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
2 std::vector<int> v(max_size);
329
2/2
✓ Branch 1 taken 16385 times.
✓ Branch 2 taken 1 times.
1 for (size_t i = 0; i < v.size(); i++) v[i] = 1;
330
331
6/36
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
2 ASSERT_THROW(
332 shared_memory::set(
333 shared_memory_test::segment_id, shared_memory_test::object_id, v),
334
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::Allocation_exception);
335 }
336
337
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_wrong_size_vector)
338 {
339
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_blocking(shared_memory_test::set_vector);
340
341
2/5
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
2 std::vector<double> v(shared_memory_test::test_array_size + 1); // !
342
343
6/36
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
2 ASSERT_THROW(
344 shared_memory::get(
345 shared_memory_test::segment_id, shared_memory_test::object_id, v),
346
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::Unexpected_size_exception);
347 }
348
349 7495 static inline bool is_one_of(double v, double a1, double a2)
350 {
351
2/2
✓ Branch 0 taken 3876 times.
✓ Branch 1 taken 3619 times.
7495 if (v == a1) return true;
352
1/2
✓ Branch 0 taken 3619 times.
✗ Branch 1 not taken.
3619 if (v == a2) return true;
353 return false;
354 }
355
356
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_concurrency)
357 {
358 // condition variables' names
359
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::stringstream cond_var_name1;
360
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 cond_var_name1 << shared_memory_test::segment_id << "_"
361
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 << shared_memory_test::concurrent_1;
362
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 std::stringstream cond_var_name2;
363
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 cond_var_name2 << shared_memory_test::segment_id << "_"
364
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 << shared_memory_test::concurrent_2;
365
366 // Prepare the condition variables
367
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
2 shared_memory::LockedConditionVariable cond_var1(cond_var_name1.str());
368
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
2 shared_memory::LockedConditionVariable cond_var2(cond_var_name2.str());
369
370
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::set(shared_memory_test::segment_id,
371 shared_memory_test::concurrent_proc1_ready,
372 false);
373
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::set(shared_memory_test::segment_id,
374 shared_memory_test::concurrent_proc2_ready,
375 false);
376
377
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_non_blocking(shared_memory_test::concurrent_1);
378
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_non_blocking(shared_memory_test::concurrent_2);
379
380 // Wait until both sub process are waiting, i.e.
381 // wait until we lock both condition variables
382 1 bool subproc_ready = false;
383
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
5 while (!subproc_ready)
384 {
385 2 bool concurrent_proc1_ready = false;
386 2 bool concurrent_proc2_ready = false;
387
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 shared_memory::get(shared_memory_test::segment_id,
388 shared_memory_test::concurrent_proc1_ready,
389 concurrent_proc1_ready);
390
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 shared_memory::get(shared_memory_test::segment_id,
391 shared_memory_test::concurrent_proc2_ready,
392 concurrent_proc2_ready);
393
3/4
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 subproc_ready = concurrent_proc1_ready && concurrent_proc2_ready;
394
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if (!subproc_ready)
395 {
396
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 usleep(TIME_SLEEP);
397 }
398 }
399
400
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cond_var1.lock_scope();
401
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cond_var2.lock_scope();
402
403 1 bool set_1_observed = false;
404 1 bool set_2_observed = false;
405
406 1 int nb_1 = 0;
407 1 int nb_2 = 0;
408
409 double a[shared_memory_test::test_array_size];
410
411
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cond_var1.notify_all();
412
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cond_var2.notify_all();
413
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cond_var1.wait();
414
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cond_var2.wait();
415
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cond_var1.unlock_scope();
416
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cond_var2.unlock_scope();
417
418 while (true)
419 {
420
1/2
✓ Branch 1 taken 7496 times.
✗ Branch 2 not taken.
7496 shared_memory::get(shared_memory_test::segment_id,
421 shared_memory_test::object_id,
422 a,
423 std::size_t{shared_memory_test::test_array_size});
424
425
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 7495 times.
7496 if (a[0] == shared_memory_test::concurrent_stop_value)
426 {
427 1 break; // the loop stops here.
428 }
429
430
2/2
✓ Branch 0 taken 3876 times.
✓ Branch 1 taken 3619 times.
7495 if (a[0] == shared_memory_test::concurrent_value_1)
431 {
432 3876 set_1_observed = true;
433 3876 nb_1++;
434 }
435
436
2/2
✓ Branch 0 taken 3619 times.
✓ Branch 1 taken 3876 times.
7495 if (a[0] == shared_memory_test::concurrent_value_2)
437 {
438 3619 set_2_observed = true;
439 3619 nb_2++;
440 }
441
442
3/12
✓ Branch 2 taken 7495 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 7495 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 7495 times.
✗ Branch 21 not taken.
7495 ASSERT_EQ(is_one_of(a[0],
443 shared_memory_test::concurrent_value_1,
444 shared_memory_test::concurrent_value_2),
445 7495 true);
446
447
2/2
✓ Branch 0 taken 22485 times.
✓ Branch 1 taken 7495 times.
29980 for (unsigned int i = 1; i < shared_memory_test::test_array_size; i++)
448 {
449
3/12
✓ Branch 1 taken 22485 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 22485 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 22485 times.
✗ Branch 20 not taken.
22485 ASSERT_EQ(a[0], a[i]);
450 }
451
452
1/2
✓ Branch 1 taken 7495 times.
✗ Branch 2 not taken.
7495 usleep(5);
453 7495 }
454
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
1 ASSERT_EQ(set_1_observed, true);
455
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
1 ASSERT_EQ(set_2_observed, true);
456 }
457
458
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_locked_condition_variable)
459 {
460 // create a data vector
461 double d[shared_memory_test::test_array_size];
462
463
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 std::cout << "SHARED_MEMORY_TESTS: Create the cond var." << std::endl;
464 shared_memory::LockedConditionVariable cond_var(
465
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 shared_memory_test::segment_id);
466
467
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::cout << "SHARED_MEMORY_TESTS: Call test exec non blocking."
468
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 << std::endl;
469
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_non_blocking(
470 shared_memory_test::locked_condition_variable);
471
472
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 std::cout << "SHARED_MEMORY_TESTS: lock_scope." << std::endl;
473
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cond_var.lock_scope();
474
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 std::cout << "SHARED_MEMORY_TESTS: wait." << std::endl;
475
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cond_var.wait();
476
477
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::cout << "SHARED_MEMORY_TESTS: Test shared_memory content."
478
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 << std::endl;
479
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::get(shared_memory_test::segment_id,
480 shared_memory_test::object_id,
481 d,
482 std::size_t{shared_memory_test::test_array_size});
483
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
5 for (unsigned int i = 0; i < shared_memory_test::test_array_size; i++)
484 {
485
3/12
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 4 times.
✗ Branch 20 not taken.
4 ASSERT_EQ(d[i], shared_memory_test::concurrent_value_2);
486 }
487
488
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 std::cout << "SHARED_MEMORY_TESTS: Notify." << std::endl;
489
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cond_var.notify_all();
490
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 std::cout << "SHARED_MEMORY_TESTS: Wait." << std::endl;
491
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cond_var.wait();
492
493
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::cout << "SHARED_MEMORY_TESTS: Test shared_memory content."
494
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 << std::endl;
495
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::get(shared_memory_test::segment_id,
496 shared_memory_test::object_id,
497 d,
498 std::size_t{shared_memory_test::test_array_size});
499
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
5 for (unsigned int i = 0; i < shared_memory_test::test_array_size; i++)
500 {
501
3/12
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 4 times.
✗ Branch 20 not taken.
4 ASSERT_EQ(d[i], shared_memory_test::concurrent_stop_value);
502 }
503
504
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 std::cout << "SHARED_MEMORY_TESTS: Notify." << std::endl;
505
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cond_var.notify_all();
506
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 std::cout << "SHARED_MEMORY_TESTS: Unlock scope." << std::endl;
507
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 cond_var.unlock_scope();
508 }
509
510
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_timed_wait)
511 {
512 // get a condition variable
513 shared_memory::LockedConditionVariable cond_var(
514
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 shared_memory_test::segment_id);
515
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 cond_var.lock_scope();
516
3/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
1 ASSERT_FALSE(cond_var.timed_wait(10));
517
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 cond_var.unlock_scope();
518 }
519
520 11 void fill(double v[], int size, double value)
521 {
522
2/2
✓ Branch 0 taken 44 times.
✓ Branch 1 taken 11 times.
55 for (int i = 0; i < size; i++)
523 {
524 44 v[i] = value;
525 }
526 11 }
527
528
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, test_condition_variable)
529 {
530
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 std::cout << "SHARED_MEMORY_TESTS: Initializing shared array" << std::endl;
531 1 int value = 1;
532 double v[shared_memory_test::test_array_size];
533 1 fill(v, shared_memory_test::test_array_size, value);
534
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::set(shared_memory_test::segment_id,
535 shared_memory_test::object_id,
536 v,
537 std::size_t{shared_memory_test::test_array_size});
538
539
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::string segment_mutex(shared_memory_test::segment_mutex_id);
540
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 std::cout << "SHARED_MEMORY_TESTS: Get a condition variable" << std::endl;
541
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
2 shared_memory::Mutex mutex(segment_mutex, true);
542 shared_memory::ConditionVariable condition(
543
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
2 shared_memory_test::segment_cv_id, true);
544
545 std::cout << "SHARED_MEMORY_TESTS: Starting another process with same "
546
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 "condition variable."
547
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 << std::endl;
548
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 shared_memory::set(
549 shared_memory_test::segment_id, "cond_var_test_ready", false);
550
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _call_executable_non_blocking(shared_memory_test::condition_variable);
551
552
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 std::cout << "SHARED_MEMORY_TESTS: Proc ready!" << std::endl;
553
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
11 for (int i = 0; i < 10; i++)
554 {
555 {
556
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
10 std::cout << "SHARED_MEMORY_TESTS: Notifying one!" << std::endl;
557
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 condition.notify_one();
558
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
10 std::cout << "SHARED_MEMORY_TESTS: Creating lock." << std::endl;
559
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 shared_memory::Lock lock(mutex);
560
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
10 std::cout << "SHARED_MEMORY_TESTS: Wait!" << std::endl;
561
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 condition.wait(lock);
562
563 std::cout << "SHARED_MEMORY_TESTS: The other process fill the "
564
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 "array with 2."
565
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 << std::endl;
566
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 shared_memory::get(
567 shared_memory_test::segment_id,
568 shared_memory_test::object_id,
569 v,
570 std::size_t{shared_memory_test::test_array_size});
571
2/2
✓ Branch 0 taken 40 times.
✓ Branch 1 taken 10 times.
50 for (unsigned int i = 0; i < shared_memory_test::test_array_size;
572 i++)
573 {
574
3/12
✓ Branch 1 taken 40 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 40 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 40 times.
✗ Branch 20 not taken.
40 ASSERT_EQ(v[i], 2);
575 }
576
577
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 std::cout << "SHARED_MEMORY_TESTS: Fill in the shared array with 1."
578
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 << std::endl;
579 10 fill(v, shared_memory_test::test_array_size, value);
580
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 shared_memory::set(
581 shared_memory_test::segment_id,
582 shared_memory_test::object_id,
583 v,
584 std::size_t{shared_memory_test::test_array_size});
585
586
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 shared_memory::get(
587 shared_memory_test::segment_id,
588 shared_memory_test::object_id,
589 v,
590 std::size_t{shared_memory_test::test_array_size});
591
3/4
✓ Branch 0 taken 40 times.
✓ Branch 1 taken 10 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
50 for (unsigned int i = 0; i < shared_memory_test::test_array_size;
592 i++)
593 {
594
3/12
✓ Branch 1 taken 40 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 40 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 40 times.
✗ Branch 20 not taken.
40 ASSERT_EQ(v[i], 1);
595 }
596 }
597 }
598
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 std::cout << "SHARED_MEMORY_TESTS: End of test." << std::endl;
599
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 condition.notify_one();
600 }
601
602
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, exchange_manager)
603 {
604 1 bool leading = true;
605 1 bool autolock = true; // we will not need to call producer.lock()
606
607 typedef shared_memory::Exchange_manager_producer<
608 shared_memory::Four_int_values,
609 DATA_EXCHANGE_QUEUE_SIZE>
610 Producer;
611
612
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 Producer::clean_mutex(shared_memory_test::segment_id);
613
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 Producer::clean_memory(shared_memory_test::segment_id);
614
615 Producer producer(shared_memory_test::segment_id,
616 shared_memory_test::object_id,
617 leading,
618
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 autolock);
619
620 // several iterations to make sure the producer can manage 2 consumers
621 // running in a row
622
623
3/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
11 for (int iteration = 0; iteration < 10; iteration++)
624 {
625
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 producer.reset_char_count();
626
627 // for informing main process if failure occured
628
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 shared_memory::clear_shared_memory(
629 shared_memory_test::exchange_manager_segment_id);
630
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 shared_memory::delete_segment(
631 shared_memory_test::exchange_manager_segment_id);
632
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 shared_memory::set<bool>(
633 shared_memory_test::exchange_manager_segment_id,
634 shared_memory_test::exchange_manager_object_id,
635 false);
636
637
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 _call_executable_non_blocking(shared_memory_test::exchange_manager);
638
639 10 int max_wait = 1000000; // 1 seconds
640 10 int waited = 0;
641 10 bool failed_to_start = false;
642
3/4
✓ Branch 1 taken 252 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 242 times.
✓ Branch 4 taken 10 times.
494 while (!producer.ready_to_produce())
643 {
644
1/2
✓ Branch 1 taken 242 times.
✗ Branch 2 not taken.
242 usleep(100);
645 242 waited += 100;
646
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 242 times.
242 if (waited > max_wait)
647 {
648 failed_to_start = true;
649 }
650 }
651
3/12
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 10 times.
✗ Branch 20 not taken.
10 ASSERT_EQ(failed_to_start, false);
652
653 // producing items
654
655 10 int id = 0;
656 10 waited = 0;
657 10 bool failed_to_produce_all = false;
658
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 std::deque<int> consumed;
659 10 int consumed_id = 0;
660
661 10 int written = 0;
662 10 int previous_written = -1;
663
664
4/4
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1000 times.
✓ Branch 2 taken 22 times.
✓ Branch 3 taken 10 times.
2086 while (id < shared_memory_test::nb_to_consume ||
665 32 consumed_id < shared_memory_test::nb_to_consume)
666 {
667 // producing items
668
2/2
✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 22 times.
1022 if (id < shared_memory_test::nb_to_consume)
669 {
670 try
671 {
672
1/4
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
2000 shared_memory::Four_int_values p(1, 1, 1, 1);
673
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
1000 p.set_id(id);
674
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
1000 producer.set(p);
675 1000 id++;
676 1000 waited = 0;
677 }
678 catch (const shared_memory::Memory_overflow_exception &)
679 {
680 usleep(200);
681 waited += 200;
682 if (waited >= max_wait)
683 {
684 failed_to_produce_all = true;
685 break;
686 }
687 }
688 }
689
690 // monitoring consumed items
691 // should have been consumed in same order
692 // as produced
693
1/2
✓ Branch 1 taken 1022 times.
✗ Branch 2 not taken.
1022 producer.get(consumed);
694
2/2
✓ Branch 1 taken 1000 times.
✓ Branch 2 taken 1022 times.
3022 while (!consumed.empty())
695 {
696
3/12
✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1000 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1000 times.
✗ Branch 21 not taken.
1000 ASSERT_EQ(consumed_id, consumed.front());
697 1000 consumed_id++;
698 1000 consumed.pop_front();
699 }
700
701 // everything supposed to be produced was produced,
702 // and consumer died, so exiting
703
4/6
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 990 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 32 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1022 times.
1054 if (id >= shared_memory_test::nb_to_consume &&
704
1/2
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
32 !producer.ready_to_produce())
705 {
706 break;
707 }
708
709
1/2
✓ Branch 1 taken 1022 times.
✗ Branch 2 not taken.
1022 written = producer.nb_char_written();
710
2/2
✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 22 times.
1022 if (written != previous_written)
711 {
712 1000 previous_written = written;
713 }
714
715 // letting a chance for the consumer to get the lock
716
1/2
✓ Branch 1 taken 1022 times.
✗ Branch 2 not taken.
1022 usleep(10);
717 }
718
719
3/12
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 10 times.
✗ Branch 20 not taken.
10 ASSERT_EQ(failed_to_produce_all, false);
720
721 bool command_failed;
722
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 shared_memory::get<bool>(
723 shared_memory_test::exchange_manager_segment_id,
724 shared_memory_test::exchange_manager_object_id,
725 command_failed);
726
4/14
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 10 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 10 times.
✗ Branch 23 not taken.
10 ASSERT_EQ(command_failed, false);
727 }
728 }
729
730
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, exchange_manager_init)
731 {
732 1 bool leading = true;
733 1 bool autolock = true; // we will not need to call producer.lock()
734
735 typedef shared_memory::Exchange_manager_producer<
736 shared_memory::Four_int_values,
737 DATA_EXCHANGE_QUEUE_SIZE>
738 Producer;
739
740 typedef shared_memory::Exchange_manager_consumer<
741 shared_memory::Four_int_values,
742 DATA_EXCHANGE_QUEUE_SIZE>
743 Consumer;
744
745
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 Producer::clean_mutex(shared_memory_test::segment_id);
746
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 Producer::clean_memory(shared_memory_test::segment_id);
747
748 Producer producer(shared_memory_test::segment_id,
749 shared_memory_test::object_id,
750 leading,
751
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 autolock);
752
753 Consumer consumer(shared_memory_test::segment_id,
754 shared_memory_test::object_id,
755
4/8
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
2 !leading);
756
757 bool consumed;
758
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
1 if (consumer.ready_to_consume())
759 {
760
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 shared_memory::Four_int_values fiv;
761
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 consumed = consumer.consume(fiv);
762 }
763
764
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
1 ASSERT_EQ(consumed, false);
765 }
766
767
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, serialization)
768 {
769
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 shared_memory::clear_shared_memory("test_ser");
770
771
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 shared_memory::Four_int_values in1(1, 1, 2, 1);
772
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 shared_memory::Four_int_values in2(1, 2, 1, 1);
773
774
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 shared_memory::Four_int_values out1;
775
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 shared_memory::Four_int_values out2;
776
777
3/6
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
1 shared_memory::serialize("test_ser", "obj1", in1);
778
3/6
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
1 shared_memory::serialize("test_ser", "obj2", in2);
779
780
3/6
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
1 shared_memory::deserialize("test_ser", "obj1", out1);
781
3/6
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
1 shared_memory::deserialize("test_ser", "obj2", out2);
782
783
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
1 ASSERT_EQ(in1.same(out1), true);
784
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
1 ASSERT_EQ(in2.same(out2), true);
785 }
786
787
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, serialization2)
788 {
789
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 shared_memory::clear_shared_memory("test_ser");
790
791 2 shared_memory::Serializer<shared_memory::Item<10>> serializer;
792
793
3/4
✓ Branch 0 taken 99 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
100 for (int v = 1; v < 100; v++)
794 {
795
1/2
✓ Branch 1 taken 99 times.
✗ Branch 2 not taken.
99 shared_memory::Item<10> in(v);
796
1/2
✓ Branch 1 taken 99 times.
✗ Branch 2 not taken.
99 shared_memory::Item<10> out;
797
1/2
✓ Branch 1 taken 99 times.
✗ Branch 2 not taken.
99 const std::string &s = serializer.serialize(in);
798
1/2
✓ Branch 1 taken 99 times.
✗ Branch 2 not taken.
99 serializer.deserialize(s, out);
799
3/12
✓ Branch 3 taken 99 times.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 99 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✓ Branch 21 taken 99 times.
✗ Branch 22 not taken.
99 ASSERT_EQ(in.get(), out.get());
800 }
801 }
802
803 1 static shared_memory::array<int> get_array_int()
804 {
805
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 shared_memory::array<int> a("test_array", 10, true, true);
806 1 int value = 5;
807
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 a.set(2, value);
808 1 return a;
809 }
810
811
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, array_int)
812 {
813
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 shared_memory::clear_array("test_array");
814
815
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 shared_memory::array<int> a("test_array", 10, true, true);
816 1 int value = 5;
817
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 a.set(2, value);
818
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 a.get(2, value);
819
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
1 ASSERT_EQ(value, 5);
820
821
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 shared_memory::array<int> b(a);
822
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 b.get(2, value);
823
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
1 ASSERT_EQ(value, 5);
824
825
1/2
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
2 shared_memory::array<int> c = std::move(a);
826
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 c.get(2, value);
827
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
1 ASSERT_EQ(value, 5);
828
829
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 shared_memory::array<int> d = get_array_int();
830
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 d.get(2, value);
831
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
1 ASSERT_EQ(value, 5);
832 }
833
834
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, array_array_int)
835 {
836
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 shared_memory::clear_array("test_array");
837
838 1 int size = 100;
839
840
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 shared_memory::array<int, 10> a("test_array", size, true, true);
841
842 int values0[10];
843 int values1[10];
844
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
11 for (uint j = 0; j < 10; j++)
845 {
846 10 values0[j] = 2;
847 10 values1[j] = 3;
848 }
849
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 a.set(0, *values0);
850
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 a.set(1, *values1);
851
852
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 a.get(0, *values1);
853
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 a.get(1, *values0);
854
855
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
11 for (uint j = 0; j < 10; j++)
856 {
857
3/12
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 10 times.
✗ Branch 20 not taken.
10 ASSERT_EQ(values0[j], 3);
858
3/12
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 10 times.
✗ Branch 20 not taken.
10 ASSERT_EQ(values1[j], 2);
859 }
860
861 int values[10];
862
2/2
✓ Branch 0 taken 100 times.
✓ Branch 1 taken 1 times.
101 for (int i = 0; i < size; i++)
863 {
864
2/2
✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 100 times.
1100 for (int j = 0; j < 10; j++)
865 {
866 1000 values[j] = (i + j);
867 }
868
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 a.set(i, *values);
869 }
870
871
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 shared_memory::array<int, 10> b(a);
872
873
3/4
✓ Branch 0 taken 100 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
101 for (int i = 0; i < size; i++)
874 {
875
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 a.get(i, *values);
876
2/2
✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 100 times.
1100 for (int j = 0; j < 10; j++)
877 {
878
3/12
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1000 times.
✗ Branch 20 not taken.
1000 ASSERT_EQ(values[j], i + j);
879 }
880
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 b.get(i, *values);
881
2/2
✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 100 times.
1100 for (int j = 0; j < 10; j++)
882 {
883
3/12
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1000 times.
✗ Branch 20 not taken.
1000 ASSERT_EQ(values[j], i + j);
884 }
885 }
886 }
887
888
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, array_serializable)
889 {
890
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 shared_memory::clear_array("test_array");
891
892 1 int size = 100;
893
894 shared_memory::array<shared_memory::Item<10>> a(
895
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 "test_array", size, true, true);
896
897
2/2
✓ Branch 0 taken 100 times.
✓ Branch 1 taken 1 times.
101 for (int i = 0; i < size; i++)
898 {
899
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 shared_memory::Item<10> item(i);
900
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 a.set(i, item);
901 }
902
903
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::Item<10> item;
904
2/2
✓ Branch 0 taken 100 times.
✓ Branch 1 taken 1 times.
101 for (int i = 0; i < size; i++)
905 {
906
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 a.get(i, item);
907
3/12
✓ Branch 2 taken 100 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 100 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 100 times.
✗ Branch 21 not taken.
100 ASSERT_EQ(item.get(), i);
908 }
909
910
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 shared_memory::array<shared_memory::Item<10>> b(a);
911
3/4
✓ Branch 0 taken 100 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
101 for (int i = 0; i < size; i++)
912 {
913
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 b.get(i, item);
914
3/12
✓ Branch 2 taken 100 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 100 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 100 times.
✗ Branch 21 not taken.
100 ASSERT_EQ(item.get(), i);
915 }
916 }
917
918
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, array_serializable_get_serializable)
919 {
920
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 shared_memory::clear_array("test_array");
921
922 1 int size = 100;
923
924 shared_memory::array<shared_memory::Item<10>> a(
925
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 "test_array", size, true, true);
926
927
2/2
✓ Branch 0 taken 100 times.
✓ Branch 1 taken 1 times.
101 for (int i = 0; i < size; i++)
928 {
929
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 shared_memory::Item<10> item(i);
930
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 a.set(i, item);
931 }
932
933
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::Item<10> item;
934
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 shared_memory::Serializer<shared_memory::Item<10>> serializer;
935
3/4
✓ Branch 0 taken 100 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
101 for (int i = 0; i < size; i++)
936 {
937
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 a.get(i, item);
938
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
200 std::string item_serialized = a.get_serialized(i);
939
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 shared_memory::Item<10> item2;
940
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 serializer.deserialize(item_serialized, item2);
941
4/14
✓ Branch 3 taken 100 times.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 100 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✓ Branch 21 taken 100 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 100 times.
✗ Branch 25 not taken.
100 ASSERT_EQ(item.get(), item2.get());
942 }
943 }
944
945
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, segment_memory_size)
946 {
947
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 shared_memory::clear_array("ut_sg_mem_size");
948
949 1 bool error = false;
950
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 1 times.
10 for (int i = 1; i < 10; i++)
951 {
952 try
953 {
954
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 shared_memory::set_segment_sizes(i);
955
2/4
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
9 shared_memory::clear_array("ut_sg_mem_size");
956 }
957 catch (...)
958 {
959 error = true;
960 }
961
3/12
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 9 times.
✗ Branch 20 not taken.
9 ASSERT_EQ(error, false);
962 }
963 }
964
965
3/6
✓ Branch 8 taken 28 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 28 times.
✗ Branch 15 not taken.
32 TEST_F(SharedMemoryTests, segment_info)
966 {
967
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 shared_memory::clear_shared_memory("test_info");
968
969
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 shared_memory::set_default_segment_sizes();
970
971
3/6
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
1 shared_memory::set<double>("test_info", "d1", 5.0);
972
3/6
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
1 shared_memory::set<double>("test_info", "d2", 10.0);
973
974 shared_memory::SegmentInfo si =
975
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 shared_memory::get_segment_info("test_info");
976
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 uint size = si.get_size();
977
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 uint free = si.get_free_memory();
978
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 bool issues = si.has_issues();
979
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 uint nb_objects = si.nb_objects();
980
981
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
1 ASSERT_EQ(size, uint(DEFAULT_SHARED_MEMORY_SIZE));
982
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
1 ASSERT_GT(size, free);
983
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
1 ASSERT_GT(free, uint(0));
984
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
1 ASSERT_EQ(nb_objects, uint(2));
985
2/12
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
1 ASSERT_FALSE(issues);
986
987
3/6
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
1 shared_memory::set<double>("test_info", "d3", 2.0);
988
3/6
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
1 shared_memory::set<double>("test_info", "d4", 3.0);
989
990 shared_memory::SegmentInfo si2 =
991
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 shared_memory::get_segment_info("test_info");
992
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 uint size2 = si2.get_size();
993
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 uint free2 = si2.get_free_memory();
994
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 bool issues2 = si2.has_issues();
995
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 uint nb_objects2 = si2.nb_objects();
996
997
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
1 ASSERT_EQ(size, size2);
998
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
1 ASSERT_LT(free2, free);
999
2/12
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
1 ASSERT_FALSE(issues2);
1000
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
1 ASSERT_EQ(nb_objects2, uint(4));
1001
1002 // memory overflow on purpose
1003
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<char> v(free2 + 1);
1004 1 bool exception = false;
1005 try
1006 {
1007
3/6
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
2 shared_memory::set("test_info", "unreasonable", v);
1008 }
1009
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 catch (...)
1010 {
1011 1 exception = true;
1012 }
1013
3/14
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
1 ASSERT_TRUE(exception);
1014
2/4
✓ Branch 1 taken 28 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 28 times.
✗ Branch 4 not taken.
84 }
1015