1 #include <catch2/catch_all.hpp>
4 #ifdef ZMQ_HAS_RVALUE_REFS
11 "Can't multipart_t::send with socket_ref");
12 static_assert(std::is_invocable<decltype(&zmq::multipart_t::recv),
16 "Can't multipart_t::recv with socket_ref");
19 "Can't construct with socket_ref");
23 TEST_CASE(
"multipart legacy test",
"[multipart]")
38 output.bind(
"inproc://multipart.test");
39 input.connect(
"inproc://multipart.test");
42 multipart_t multipart;
43 assert(multipart.empty());
46 assert(multipart.size() == 1);
49 assert(multipart.empty());
53 assert(multipart.size() == 1);
56 msg = multipart.pop();
57 assert(multipart.empty());
61 multipart.addstr(
"A");
62 multipart.addstr(
"BB");
63 multipart.addstr(
"CCC");
64 assert(multipart.size() == 3);
66 multipart_t copy = multipart.clone();
67 assert(copy.size() == 3);
74 assert(copy.size() == 3);
76 assert(copy.equal(&multipart));
79 assert(copy == multipart);
80 assert(multipart == copy);
84 assert(copy != multipart);
85 assert(multipart != copy);
87 multipart_t emptyMessage1 {};
88 multipart_t emptyMessage2 {};
90 assert(emptyMessage1 == emptyMessage2);
91 assert(emptyMessage2 == emptyMessage1);
94 assert(multipart.empty());
98 multipart.addstr(
"Frame6");
99 multipart.addstr(
"Frame7");
100 multipart.addtyp(8.0
f);
101 multipart.addmem(
"Frame9", 6);
103 multipart.pushstr(
"Frame3");
104 multipart.pushstr(
"Frame2");
105 multipart.pushtyp(1.0
f);
106 multipart.pushmem(
"Frame0", 6);
107 assert(multipart.size() == 10);
109 const message_t &front_msg = multipart.front();
110 assert(multipart.size() == 10);
113 const message_t &back_msg = multipart.back();
114 assert(multipart.size() == 10);
117 msg = multipart.remove();
118 assert(multipart.size() == 9);
121 msg = multipart.pop();
122 assert(multipart.size() == 8);
125 num = multipart.poptyp<
float>();
126 assert(multipart.size() == 7);
129 str = multipart.popstr();
130 assert(multipart.size() == 6);
131 assert(
str ==
"Frame2");
133 str = multipart.popstr();
134 assert(multipart.size() == 5);
135 assert(
str ==
"Frame3");
137 str = multipart.popstr();
138 assert(multipart.size() == 4);
139 assert(
str ==
"Frame4");
141 str = multipart.popstr();
142 assert(multipart.size() == 3);
143 assert(
str ==
"Frame5");
145 str = multipart.popstr();
146 assert(multipart.size() == 2);
147 assert(
str ==
"Frame6");
149 str = multipart.popstr();
150 assert(multipart.size() == 1);
151 assert(
str ==
"Frame7");
153 num = multipart.poptyp<
float>();
154 assert(multipart.empty());
158 multipart_t head(
"One", 3);
160 assert(head.size() == 2);
163 tail.pushstr(
"Ninety-nine");
164 assert(tail.size() == 2);
167 assert(tmp.size() == 1);
169 multipart_t mid = multipart_t::create(49.0
f);
170 mid.append(std::move(tmp));
171 assert(mid.size() == 2);
174 multipart_t
merged(std::move(mid));
175 merged.prepend(std::move(head));
176 merged.append(std::move(tail));
177 assert(
merged.size() == 6);
178 assert(head.empty());
179 assert(tail.empty());
185 multipart_t received(
input);
186 assert(received.size() == 6);
188 str = received.popstr();
189 assert(received.size() == 5);
190 assert(
str ==
"One");
192 str = received.popstr();
193 assert(received.size() == 4);
194 assert(
str ==
"Two");
196 num = received.poptyp<
float>();
197 assert(received.size() == 3);
198 assert(num == 49.0
f);
200 str = received.popstr();
201 assert(received.size() == 2);
202 assert(
str ==
"Fifty");
204 str = received.popstr();
205 assert(received.size() == 1);
206 assert(
str ==
"Ninety-nine");
208 str = received.popstr();
209 assert(received.empty());
210 assert(
str ==
"One-hundred");