mirror of
https://github.com/zeromq/cppzmq.git
synced 2024-12-12 18:40:28 +01:00
ff3c221516
For header only library like cppzmq, whitespace style inherited from libzmq is too restrictive. Solution: relaxing whitespace before parens from always to in control statements only, increased max column width from 80 to 85 and removing requirement of whitespace after template keyword.
174 lines
4.2 KiB
C++
174 lines
4.2 KiB
C++
#include <gtest/gtest.h>
|
|
#include <zmq_addon.hpp>
|
|
|
|
#ifdef ZMQ_HAS_RVALUE_REFS
|
|
/// \todo split this up into separate test cases
|
|
///
|
|
TEST(multipart, legacy_test)
|
|
{
|
|
using namespace zmq;
|
|
|
|
bool ok = true;
|
|
(void) ok;
|
|
float num = 0;
|
|
(void) num;
|
|
std::string str = "";
|
|
message_t msg;
|
|
|
|
// Create two PAIR sockets and connect over inproc
|
|
context_t context(1);
|
|
socket_t output(context, ZMQ_PAIR);
|
|
socket_t input(context, ZMQ_PAIR);
|
|
output.bind("inproc://multipart.test");
|
|
input.connect("inproc://multipart.test");
|
|
|
|
// Test send and receive of single-frame message
|
|
multipart_t multipart;
|
|
assert(multipart.empty());
|
|
|
|
multipart.push(message_t("Hello", 5));
|
|
assert(multipart.size() == 1);
|
|
|
|
ok = multipart.send(output);
|
|
assert(multipart.empty());
|
|
assert(ok);
|
|
|
|
ok = multipart.recv(input);
|
|
assert(multipart.size() == 1);
|
|
assert(ok);
|
|
|
|
msg = multipart.pop();
|
|
assert(multipart.empty());
|
|
assert(std::string(msg.data<char>(), msg.size()) == "Hello");
|
|
|
|
// Test send and receive of multi-frame message
|
|
multipart.addstr("A");
|
|
multipart.addstr("BB");
|
|
multipart.addstr("CCC");
|
|
assert(multipart.size() == 3);
|
|
|
|
multipart_t copy = multipart.clone();
|
|
assert(copy.size() == 3);
|
|
|
|
ok = copy.send(output);
|
|
assert(copy.empty());
|
|
assert(ok);
|
|
|
|
ok = copy.recv(input);
|
|
assert(copy.size() == 3);
|
|
assert(ok);
|
|
assert(copy.equal(&multipart));
|
|
|
|
multipart.clear();
|
|
assert(multipart.empty());
|
|
|
|
// Test message frame manipulation
|
|
multipart.add(message_t("Frame5", 6));
|
|
multipart.addstr("Frame6");
|
|
multipart.addstr("Frame7");
|
|
multipart.addtyp(8.0f);
|
|
multipart.addmem("Frame9", 6);
|
|
multipart.push(message_t("Frame4", 6));
|
|
multipart.pushstr("Frame3");
|
|
multipart.pushstr("Frame2");
|
|
multipart.pushtyp(1.0f);
|
|
multipart.pushmem("Frame0", 6);
|
|
assert(multipart.size() == 10);
|
|
|
|
msg = multipart.remove();
|
|
assert(multipart.size() == 9);
|
|
assert(std::string(msg.data<char>(), msg.size()) == "Frame9");
|
|
|
|
msg = multipart.pop();
|
|
assert(multipart.size() == 8);
|
|
assert(std::string(msg.data<char>(), msg.size()) == "Frame0");
|
|
|
|
num = multipart.poptyp<float>();
|
|
assert(multipart.size() == 7);
|
|
assert(num == 1.0f);
|
|
|
|
str = multipart.popstr();
|
|
assert(multipart.size() == 6);
|
|
assert(str == "Frame2");
|
|
|
|
str = multipart.popstr();
|
|
assert(multipart.size() == 5);
|
|
assert(str == "Frame3");
|
|
|
|
str = multipart.popstr();
|
|
assert(multipart.size() == 4);
|
|
assert(str == "Frame4");
|
|
|
|
str = multipart.popstr();
|
|
assert(multipart.size() == 3);
|
|
assert(str == "Frame5");
|
|
|
|
str = multipart.popstr();
|
|
assert(multipart.size() == 2);
|
|
assert(str == "Frame6");
|
|
|
|
str = multipart.popstr();
|
|
assert(multipart.size() == 1);
|
|
assert(str == "Frame7");
|
|
|
|
num = multipart.poptyp<float>();
|
|
assert(multipart.empty());
|
|
assert(num == 8.0f);
|
|
|
|
// Test message constructors and concatenation
|
|
multipart_t head("One", 3);
|
|
head.addstr("Two");
|
|
assert(head.size() == 2);
|
|
|
|
multipart_t tail(std::string("One-hundred"));
|
|
tail.pushstr("Ninety-nine");
|
|
assert(tail.size() == 2);
|
|
|
|
multipart_t tmp(message_t("Fifty", 5));
|
|
assert(tmp.size() == 1);
|
|
|
|
multipart_t mid = multipart_t::create(49.0f);
|
|
mid.append(std::move(tmp));
|
|
assert(mid.size() == 2);
|
|
assert(tmp.empty());
|
|
|
|
multipart_t merged(std::move(mid));
|
|
merged.prepend(std::move(head));
|
|
merged.append(std::move(tail));
|
|
assert(merged.size() == 6);
|
|
assert(head.empty());
|
|
assert(tail.empty());
|
|
|
|
ok = merged.send(output);
|
|
assert(merged.empty());
|
|
assert(ok);
|
|
|
|
multipart_t received(input);
|
|
assert(received.size() == 6);
|
|
|
|
str = received.popstr();
|
|
assert(received.size() == 5);
|
|
assert(str == "One");
|
|
|
|
str = received.popstr();
|
|
assert(received.size() == 4);
|
|
assert(str == "Two");
|
|
|
|
num = received.poptyp<float>();
|
|
assert(received.size() == 3);
|
|
assert(num == 49.0f);
|
|
|
|
str = received.popstr();
|
|
assert(received.size() == 2);
|
|
assert(str == "Fifty");
|
|
|
|
str = received.popstr();
|
|
assert(received.size() == 1);
|
|
assert(str == "Ninety-nine");
|
|
|
|
str = received.popstr();
|
|
assert(received.empty());
|
|
assert(str == "One-hundred");
|
|
}
|
|
#endif
|