Skip to content

Commit dc996cd

Browse files
committed
Problem: zmq_addon header contains tests (with a syntax error)
Solution: convert to googletest based test, and fix syntax error
1 parent 89d9db7 commit dc996cd

File tree

3 files changed

+172
-166
lines changed

3 files changed

+172
-166
lines changed

tests/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ add_executable(
2626
context.cpp
2727
socket.cpp
2828
poller.cpp
29+
multipart.cpp
2930
)
3031

3132
target_link_libraries(

tests/multipart.cpp

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
#include <gtest/gtest.h>
2+
#include <zmq_addon.hpp>
3+
4+
#ifdef ZMQ_HAS_RVALUE_REFS
5+
/// \todo split this up into separate test cases
6+
///
7+
TEST(multipart, legacy_test)
8+
{
9+
using namespace zmq;
10+
11+
bool ok = true; (void) ok;
12+
float num = 0; (void) num;
13+
std::string str = "";
14+
message_t msg;
15+
16+
// Create two PAIR sockets and connect over inproc
17+
context_t context(1);
18+
socket_t output(context, ZMQ_PAIR);
19+
socket_t input(context, ZMQ_PAIR);
20+
output.bind("inproc://multipart.test");
21+
input.connect("inproc://multipart.test");
22+
23+
// Test send and receive of single-frame message
24+
multipart_t multipart;
25+
assert(multipart.empty());
26+
27+
multipart.push(message_t("Hello", 5));
28+
assert(multipart.size() == 1);
29+
30+
ok = multipart.send(output);
31+
assert(multipart.empty());
32+
assert(ok);
33+
34+
ok = multipart.recv(input);
35+
assert(multipart.size() == 1);
36+
assert(ok);
37+
38+
msg = multipart.pop();
39+
assert(multipart.empty());
40+
assert(std::string(msg.data<char>(), msg.size()) == "Hello");
41+
42+
// Test send and receive of multi-frame message
43+
multipart.addstr("A");
44+
multipart.addstr("BB");
45+
multipart.addstr("CCC");
46+
assert(multipart.size() == 3);
47+
48+
multipart_t copy = multipart.clone();
49+
assert(copy.size() == 3);
50+
51+
ok = copy.send(output);
52+
assert(copy.empty());
53+
assert(ok);
54+
55+
ok = copy.recv(input);
56+
assert(copy.size() == 3);
57+
assert(ok);
58+
assert(copy.equal(&multipart));
59+
60+
multipart.clear();
61+
assert(multipart.empty());
62+
63+
// Test message frame manipulation
64+
multipart.add(message_t("Frame5", 6));
65+
multipart.addstr("Frame6");
66+
multipart.addstr("Frame7");
67+
multipart.addtyp(8.0f);
68+
multipart.addmem("Frame9", 6);
69+
multipart.push(message_t("Frame4", 6));
70+
multipart.pushstr("Frame3");
71+
multipart.pushstr("Frame2");
72+
multipart.pushtyp(1.0f);
73+
multipart.pushmem("Frame0", 6);
74+
assert(multipart.size() == 10);
75+
76+
msg = multipart.remove();
77+
assert(multipart.size() == 9);
78+
assert(std::string(msg.data<char>(), msg.size()) == "Frame9");
79+
80+
msg = multipart.pop();
81+
assert(multipart.size() == 8);
82+
assert(std::string(msg.data<char>(), msg.size()) == "Frame0");
83+
84+
num = multipart.poptyp<float>();
85+
assert(multipart.size() == 7);
86+
assert(num == 1.0f);
87+
88+
str = multipart.popstr();
89+
assert(multipart.size() == 6);
90+
assert(str == "Frame2");
91+
92+
str = multipart.popstr();
93+
assert(multipart.size() == 5);
94+
assert(str == "Frame3");
95+
96+
str = multipart.popstr();
97+
assert(multipart.size() == 4);
98+
assert(str == "Frame4");
99+
100+
str = multipart.popstr();
101+
assert(multipart.size() == 3);
102+
assert(str == "Frame5");
103+
104+
str = multipart.popstr();
105+
assert(multipart.size() == 2);
106+
assert(str == "Frame6");
107+
108+
str = multipart.popstr();
109+
assert(multipart.size() == 1);
110+
assert(str == "Frame7");
111+
112+
num = multipart.poptyp<float>();
113+
assert(multipart.empty());
114+
assert(num == 8.0f);
115+
116+
// Test message constructors and concatenation
117+
multipart_t head("One", 3);
118+
head.addstr("Two");
119+
assert(head.size() == 2);
120+
121+
multipart_t tail(std::string("One-hundred"));
122+
tail.pushstr("Ninety-nine");
123+
assert(tail.size() == 2);
124+
125+
multipart_t tmp(message_t("Fifty", 5));
126+
assert(tmp.size() == 1);
127+
128+
multipart_t mid = multipart_t::create(49.0f);
129+
mid.append(std::move(tmp));
130+
assert(mid.size() == 2);
131+
assert(tmp.empty());
132+
133+
multipart_t merged(std::move(mid));
134+
merged.prepend(std::move(head));
135+
merged.append(std::move(tail));
136+
assert(merged.size() == 6);
137+
assert(head.empty());
138+
assert(tail.empty());
139+
140+
ok = merged.send(output);
141+
assert(merged.empty());
142+
assert(ok);
143+
144+
multipart_t received(input);
145+
assert(received.size() == 6);
146+
147+
str = received.popstr();
148+
assert(received.size() == 5);
149+
assert(str == "One");
150+
151+
str = received.popstr();
152+
assert(received.size() == 4);
153+
assert(str == "Two");
154+
155+
num = received.poptyp<float>();
156+
assert(received.size() == 3);
157+
assert(num == 49.0f);
158+
159+
str = received.popstr();
160+
assert(received.size() == 2);
161+
assert(str == "Fifty");
162+
163+
str = received.popstr();
164+
assert(received.size() == 1);
165+
assert(str == "Ninety-nine");
166+
167+
str = received.popstr();
168+
assert(received.empty());
169+
assert(str == "One-hundred");
170+
}
171+
#endif

zmq_addon.hpp

Lines changed: 0 additions & 166 deletions
Original file line numberDiff line numberDiff line change
@@ -413,172 +413,6 @@ class multipart_t
413413
return true;
414414
}
415415

416-
// Self test
417-
static int test()
418-
{
419-
bool ok = true; (void) ok;
420-
float num = 0; (void) num;
421-
std::string str = "";
422-
message_t msg;
423-
424-
// Create two PAIR sockets and connect over inproc
425-
context_t context(1);
426-
socket_t output(context, ZMQ_PAIR);
427-
socket_t input(context, ZMQ_PAIR);
428-
output.bind("inproc://multipart.test");
429-
input.connect("inproc://multipart.test");
430-
431-
// Test send and receive of single-frame message
432-
multipart_t multipart;
433-
assert(multipart.empty());
434-
435-
multipart.push(message_t("Hello", 5));
436-
assert(multipart.size() == 1);
437-
438-
ok = multipart.send(output);
439-
assert(multipart.empty());
440-
assert(ok);
441-
442-
ok = multipart.recv(input);
443-
assert(multipart.size() == 1);
444-
assert(ok);
445-
446-
msg = multipart.pop();
447-
assert(multipart.empty());
448-
assert(std::string(msg.data<char>(), msg.size()) == "Hello");
449-
450-
// Test send and receive of multi-frame message
451-
multipart.addstr("A");
452-
multipart.addstr("BB");
453-
multipart.addstr("CCC");
454-
assert(multipart.size() == 3);
455-
456-
multipart_t copy = multipart.clone();
457-
assert(copy.size() == 3);
458-
459-
ok = copy.send(output);
460-
assert(copy.empty());
461-
assert(ok);
462-
463-
ok = copy.recv(input);
464-
assert(copy.size() == 3);
465-
assert(ok);
466-
assert(copy.equal(&multipart));
467-
468-
multipart.clear();
469-
assert(multipart.empty());
470-
471-
// Test message frame manipulation
472-
multipart.add(message_t("Frame5", 6));
473-
multipart.addstr("Frame6");
474-
multipart.addstr("Frame7");
475-
multipart.addtyp(8.0f);
476-
multipart.addmem("Frame9", 6);
477-
multipart.push(message_t("Frame4", 6));
478-
multipart.pushstr("Frame3");
479-
multipart.pushstr("Frame2");
480-
multipart.pushtyp(1.0f);
481-
multipart.pushmem("Frame0", 6);
482-
assert(multipart.size() == 10);
483-
484-
msg = multipart.remove();
485-
assert(multipart.size() == 9);
486-
assert(std::string(msg.data<char>(), msg.size()) == "Frame9");
487-
488-
msg = multipart.pop();
489-
assert(multipart.size() == 8);
490-
assert(std::string(msg.data<char>(), msg.size()) == "Frame0");
491-
492-
num = multipart.poptyp<float>();
493-
assert(multipart.size() == 7);
494-
assert(num == 1.0f);
495-
496-
str = multipart.popstr();
497-
assert(multipart.size() == 6);
498-
assert(str == "Frame2");
499-
500-
str = multipart.popstr();
501-
assert(multipart.size() == 5);
502-
assert(str == "Frame3");
503-
504-
str = multipart.popstr();
505-
assert(multipart.size() == 4);
506-
assert(str == "Frame4");
507-
508-
str = multipart.popstr();
509-
assert(multipart.size() == 3);
510-
assert(str == "Frame5");
511-
512-
str = multipart.popstr();
513-
assert(multipart.size() == 2);
514-
assert(str == "Frame6");
515-
516-
str = multipart.popstr();
517-
assert(multipart.size() == 1);
518-
assert(str == "Frame7");
519-
520-
num = multipart.poptyp<float>();
521-
assert(multipart.empty());
522-
assert(num == 8.0f);
523-
524-
// Test message constructors and concatenation
525-
multipart_t head("One", 3);
526-
head.addstr("Two");
527-
assert(head.size() == 2);
528-
529-
multipart_t tail("One-hundred");
530-
tail.pushstr("Ninety-nine");
531-
assert(tail.size() == 2);
532-
533-
multipart_t tmp(message_t("Fifty", 5));
534-
assert(tmp.size() == 1);
535-
536-
multipart_t mid = multipart_t::create(49.0f);
537-
mid.append(std::move(tmp));
538-
assert(mid.size() == 2);
539-
assert(tmp.empty());
540-
541-
multipart_t merged(std::move(mid));
542-
merged.prepend(std::move(head));
543-
merged.append(std::move(tail));
544-
assert(merged.size() == 6);
545-
assert(head.empty());
546-
assert(tail.empty());
547-
548-
ok = merged.send(output);
549-
assert(merged.empty());
550-
assert(ok);
551-
552-
multipart_t received(input);
553-
assert(received.size() == 6);
554-
555-
str = received.popstr();
556-
assert(received.size() == 5);
557-
assert(str == "One");
558-
559-
str = received.popstr();
560-
assert(received.size() == 4);
561-
assert(str == "Two");
562-
563-
num = received.poptyp<float>();
564-
assert(received.size() == 3);
565-
assert(num == 49.0f);
566-
567-
str = received.popstr();
568-
assert(received.size() == 2);
569-
assert(str == "Fifty");
570-
571-
str = received.popstr();
572-
assert(received.size() == 1);
573-
assert(str == "Ninety-nine");
574-
575-
str = received.popstr();
576-
assert(received.empty());
577-
assert(str == "One-hundred");
578-
579-
return 0;
580-
}
581-
582416
private:
583417
// Disable implicit copying (moving is more efficient)
584418
multipart_t(const multipart_t& other) ZMQ_DELETED_FUNCTION;

0 commit comments

Comments
 (0)