buffer.cpp
Go to the documentation of this file.
1 #include <catch2/catch_all.hpp>
2 #include <zmq.hpp>
3 
4 #ifdef ZMQ_CPP17
5 static_assert(std::is_nothrow_swappable_v<zmq::const_buffer>);
6 static_assert(std::is_nothrow_swappable_v<zmq::mutable_buffer>);
7 static_assert(std::is_trivially_copyable_v<zmq::const_buffer>);
8 static_assert(std::is_trivially_copyable_v<zmq::mutable_buffer>);
9 #endif
10 
11 #ifdef ZMQ_CPP11
12 
13 using BT = int16_t;
14 
15 TEST_CASE("buffer default ctor", "[buffer]")
16 {
17  constexpr zmq::mutable_buffer mb;
18  constexpr zmq::const_buffer cb;
19  CHECK(mb.size() == 0);
20  CHECK(mb.data() == nullptr);
21  CHECK(cb.size() == 0);
22  CHECK(cb.data() == nullptr);
23 }
24 
25 TEST_CASE("buffer data ctor", "[buffer]")
26 {
27  std::vector<BT> v(10);
28  zmq::const_buffer cb(v.data(), v.size() * sizeof(BT));
29  CHECK(cb.size() == v.size() * sizeof(BT));
30  CHECK(cb.data() == v.data());
31  zmq::mutable_buffer mb(v.data(), v.size() * sizeof(BT));
32  CHECK(mb.size() == v.size() * sizeof(BT));
33  CHECK(mb.data() == v.data());
34  zmq::const_buffer from_mut = mb;
35  CHECK(mb.size() == from_mut.size());
36  CHECK(mb.data() == from_mut.data());
37  const auto cmb = mb;
38  static_assert(std::is_same<decltype(cmb.data()), void *>::value, "");
39 
40  constexpr const void *cp = nullptr;
41  constexpr void *p = nullptr;
42  constexpr zmq::const_buffer cecb = zmq::buffer(p, 0);
43  constexpr zmq::mutable_buffer cemb = zmq::buffer(p, 0);
44  CHECK(cecb.data() == nullptr);
45  CHECK(cemb.data() == nullptr);
46 }
47 
48 TEST_CASE("const_buffer operator+", "[buffer]")
49 {
50  std::vector<BT> v(10);
51  zmq::const_buffer cb(v.data(), v.size() * sizeof(BT));
52  const size_t shift = 4;
53  auto shifted = cb + shift;
54  CHECK(shifted.size() == v.size() * sizeof(BT) - shift);
55  CHECK(shifted.data() == v.data() + shift / sizeof(BT));
56  auto shifted2 = shift + cb;
57  CHECK(shifted.size() == shifted2.size());
58  CHECK(shifted.data() == shifted2.data());
59  auto cbinp = cb;
60  cbinp += shift;
61  CHECK(shifted.size() == cbinp.size());
62  CHECK(shifted.data() == cbinp.data());
63 }
64 
65 TEST_CASE("mutable_buffer operator+", "[buffer]")
66 {
67  std::vector<BT> v(10);
68  zmq::mutable_buffer mb(v.data(), v.size() * sizeof(BT));
69  const size_t shift = 4;
70  auto shifted = mb + shift;
71  CHECK(shifted.size() == v.size() * sizeof(BT) - shift);
72  CHECK(shifted.data() == v.data() + shift / sizeof(BT));
73  auto shifted2 = shift + mb;
74  CHECK(shifted.size() == shifted2.size());
75  CHECK(shifted.data() == shifted2.data());
76  auto mbinp = mb;
77  mbinp += shift;
78  CHECK(shifted.size() == mbinp.size());
79  CHECK(shifted.data() == mbinp.data());
80 }
81 
82 TEST_CASE("mutable_buffer creation basic", "[buffer]")
83 {
84  std::vector<BT> v(10);
85  zmq::mutable_buffer mb(v.data(), v.size() * sizeof(BT));
86  zmq::mutable_buffer mb2 = zmq::buffer(v.data(), v.size() * sizeof(BT));
87  CHECK(mb.data() == mb2.data());
88  CHECK(mb.size() == mb2.size());
89  zmq::mutable_buffer mb3 = zmq::buffer(mb);
90  CHECK(mb.data() == mb3.data());
91  CHECK(mb.size() == mb3.size());
92  zmq::mutable_buffer mb4 = zmq::buffer(mb, 10 * v.size() * sizeof(BT));
93  CHECK(mb.data() == mb4.data());
94  CHECK(mb.size() == mb4.size());
95  zmq::mutable_buffer mb5 = zmq::buffer(mb, 4);
96  CHECK(mb.data() == mb5.data());
97  CHECK(4 == mb5.size());
98 }
99 
100 TEST_CASE("const_buffer creation basic", "[buffer]")
101 {
102  const std::vector<BT> v(10);
103  zmq::const_buffer cb(v.data(), v.size() * sizeof(BT));
104  zmq::const_buffer cb2 = zmq::buffer(v.data(), v.size() * sizeof(BT));
105  CHECK(cb.data() == cb2.data());
106  CHECK(cb.size() == cb2.size());
107  zmq::const_buffer cb3 = zmq::buffer(cb);
108  CHECK(cb.data() == cb3.data());
109  CHECK(cb.size() == cb3.size());
110  zmq::const_buffer cb4 = zmq::buffer(cb, 10 * v.size() * sizeof(BT));
111  CHECK(cb.data() == cb4.data());
112  CHECK(cb.size() == cb4.size());
113  zmq::const_buffer cb5 = zmq::buffer(cb, 4);
114  CHECK(cb.data() == cb5.data());
115  CHECK(4 == cb5.size());
116 }
117 
118 TEST_CASE("mutable_buffer creation C array", "[buffer]")
119 {
120  BT d[10] = {};
121  zmq::mutable_buffer b = zmq::buffer(d);
122  CHECK(b.size() == 10 * sizeof(BT));
123  CHECK(b.data() == static_cast<BT*>(d));
124  zmq::const_buffer b2 = zmq::buffer(d, 4);
125  CHECK(b2.size() == 4);
126  CHECK(b2.data() == static_cast<BT*>(d));
127 }
128 
129 TEST_CASE("const_buffer creation C array", "[buffer]")
130 {
131  const BT d[10] = {};
132  zmq::const_buffer b = zmq::buffer(d);
133  CHECK(b.size() == 10 * sizeof(BT));
134  CHECK(b.data() == static_cast<const BT*>(d));
135  zmq::const_buffer b2 = zmq::buffer(d, 4);
136  CHECK(b2.size() == 4);
137  CHECK(b2.data() == static_cast<const BT*>(d));
138 }
139 
140 TEST_CASE("mutable_buffer creation array", "[buffer]")
141 {
142  std::array<BT, 10> d = {};
143  zmq::mutable_buffer b = zmq::buffer(d);
144  CHECK(b.size() == d.size() * sizeof(BT));
145  CHECK(b.data() == d.data());
146  zmq::mutable_buffer b2 = zmq::buffer(d, 4);
147  CHECK(b2.size() == 4);
148  CHECK(b2.data() == d.data());
149 }
150 
151 TEST_CASE("const_buffer creation array", "[buffer]")
152 {
153  const std::array<BT, 10> d = {};
154  zmq::const_buffer b = zmq::buffer(d);
155  CHECK(b.size() == d.size() * sizeof(BT));
156  CHECK(b.data() == d.data());
157  zmq::const_buffer b2 = zmq::buffer(d, 4);
158  CHECK(b2.size() == 4);
159  CHECK(b2.data() == d.data());
160 }
161 
162 TEST_CASE("const_buffer creation array 2", "[buffer]")
163 {
164  std::array<const BT, 10> d = {{}};
165  zmq::const_buffer b = zmq::buffer(d);
166  CHECK(b.size() == d.size() * sizeof(BT));
167  CHECK(b.data() == d.data());
168  zmq::const_buffer b2 = zmq::buffer(d, 4);
169  CHECK(b2.size() == 4);
170  CHECK(b2.data() == d.data());
171 }
172 
173 TEST_CASE("mutable_buffer creation vector", "[buffer]")
174 {
175  std::vector<BT> d(10);
176  zmq::mutable_buffer b = zmq::buffer(d);
177  CHECK(b.size() == d.size() * sizeof(BT));
178  CHECK(b.data() == d.data());
179  zmq::mutable_buffer b2 = zmq::buffer(d, 4);
180  CHECK(b2.size() == 4);
181  CHECK(b2.data() == d.data());
182  d.clear();
183  b = zmq::buffer(d);
184  CHECK(b.size() == 0);
185  CHECK(b.data() == nullptr);
186 }
187 
188 TEST_CASE("const_buffer creation vector", "[buffer]")
189 {
190  std::vector<BT> d(10);
191  zmq::const_buffer b = zmq::buffer(static_cast<const std::vector<BT> &>(d));
192  CHECK(b.size() == d.size() * sizeof(BT));
193  CHECK(b.data() == d.data());
194  zmq::const_buffer b2 = zmq::buffer(static_cast<const std::vector<BT> &>(d), 4);
195  CHECK(b2.size() == 4);
196  CHECK(b2.data() == d.data());
197  d.clear();
198  b = zmq::buffer(static_cast<const std::vector<BT> &>(d));
199  CHECK(b.size() == 0);
200  CHECK(b.data() == nullptr);
201 }
202 
203 TEST_CASE("const_buffer creation string", "[buffer]")
204 {
205  const std::wstring d(10, L'a');
206  zmq::const_buffer b = zmq::buffer(d);
207  CHECK(b.size() == d.size() * sizeof(wchar_t));
208  CHECK(b.data() == d.data());
209  zmq::const_buffer b2 = zmq::buffer(d, 4);
210  CHECK(b2.size() == 4);
211  CHECK(b2.data() == d.data());
212 }
213 
214 TEST_CASE("mutable_buffer creation string", "[buffer]")
215 {
216  std::wstring d(10, L'a');
217  zmq::mutable_buffer b = zmq::buffer(d);
218  CHECK(b.size() == d.size() * sizeof(wchar_t));
219  CHECK(b.data() == d.data());
220  zmq::mutable_buffer b2 = zmq::buffer(d, 4);
221  CHECK(b2.size() == 4);
222  CHECK(b2.data() == d.data());
223 }
224 
225 #if CPPZMQ_HAS_STRING_VIEW
226 TEST_CASE("const_buffer creation string_view", "[buffer]")
227 {
228  std::wstring dstr(10, L'a');
229  std::wstring_view d = dstr;
230  zmq::const_buffer b = zmq::buffer(d);
231  CHECK(b.size() == d.size() * sizeof(wchar_t));
232  CHECK(b.data() == d.data());
233  zmq::const_buffer b2 = zmq::buffer(d, 4);
234  CHECK(b2.size() == 4);
235  CHECK(b2.data() == d.data());
236 }
237 #endif
238 
239 TEST_CASE("const_buffer creation with str_buffer", "[buffer]")
240 {
241  const wchar_t wd[10] = {};
242  zmq::const_buffer b = zmq::str_buffer(wd);
243  CHECK(b.size() == 9 * sizeof(wchar_t));
244  CHECK(b.data() == static_cast<const wchar_t*>(wd));
245 
246  zmq::const_buffer b2_null = zmq::buffer("hello");
247  constexpr zmq::const_buffer b2 = zmq::str_buffer("hello");
248  CHECK(b2_null.size() == 6);
249  CHECK(b2.size() == 5);
250  CHECK(std::string(static_cast<const char*>(b2.data()), b2.size()) == "hello");
251 }
252 
253 TEST_CASE("const_buffer creation with zbuf string literal char", "[buffer]")
254 {
255  using namespace zmq::literals;
256  constexpr zmq::const_buffer b = "hello"_zbuf;
257  CHECK(b.size() == 5);
258  CHECK(std::memcmp(b.data(), "hello", b.size()) == 0);
259 }
260 
261 TEST_CASE("const_buffer creation with zbuf string literal wchar_t", "[buffer]")
262 {
263  using namespace zmq::literals;
264  constexpr zmq::const_buffer b = L"hello"_zbuf;
265  CHECK(b.size() == 5 * sizeof(wchar_t));
266  CHECK(std::memcmp(b.data(), L"hello", b.size()) == 0);
267 }
268 
269 TEST_CASE("const_buffer creation with zbuf string literal char16_t", "[buffer]")
270 {
271  using namespace zmq::literals;
272  constexpr zmq::const_buffer b = u"hello"_zbuf;
273  CHECK(b.size() == 5 * sizeof(char16_t));
274  CHECK(std::memcmp(b.data(), u"hello", b.size()) == 0);
275 }
276 
277 TEST_CASE("const_buffer creation with zbuf string literal char32_t", "[buffer]")
278 {
279  using namespace zmq::literals;
280  constexpr zmq::const_buffer b = U"hello"_zbuf;
281  CHECK(b.size() == 5 * sizeof(char32_t));
282  CHECK(std::memcmp(b.data(), U"hello", b.size()) == 0);
283 }
284 
285 TEST_CASE("buffer of structs", "[buffer]")
286 {
287  struct some_pod
288  {
289  int64_t val;
290  char arr[8];
291  };
292  struct some_non_pod
293  {
294  int64_t val;
295  char arr[8];
296  std::vector<int> s; // not trivially copyable
297  };
300  std::array<some_pod, 1> d;
301  zmq::mutable_buffer b = zmq::buffer(d);
302  CHECK(b.size() == d.size() * sizeof(some_pod));
303  CHECK(b.data() == d.data());
304 }
305 
306 #endif
TEST_CASE
TEST_CASE("context construct default and destroy", "[context]")
Definition: context.cpp:9
s
XmlRpcServer s
string
GLsizei const GLchar *const * string
Definition: glcorearb.h:3083
b
GLboolean GLboolean GLboolean b
Definition: glcorearb.h:3228
zmq.hpp
testing::internal::wstring
::std::wstring wstring
Definition: gtest-port.h:887
buffer
GLuint buffer
Definition: glcorearb.h:2939
p
const char * p
Definition: gmock-matchers_test.cc:3863
CHECK
#define CHECK(x)
Definition: php/ext/google/protobuf/upb.c:8393
d
d
v
const GLdouble * v
Definition: glcorearb.h:3106
val
GLuint GLfloat * val
Definition: glcorearb.h:3604
value
GLsizei const GLfloat * value
Definition: glcorearb.h:3093


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:48