socket_ref.cpp
Go to the documentation of this file.
1 #include <catch2/catch_all.hpp>
2 #include <zmq.hpp>
3 #ifdef ZMQ_CPP11
4 
5 #ifdef ZMQ_CPP17
6 static_assert(std::is_nothrow_swappable_v<zmq::socket_ref>);
7 #endif
8 static_assert(sizeof(zmq::socket_ref) == sizeof(void *), "size mismatch");
9 static_assert(alignof(zmq::socket_ref) == alignof(void *), "alignment mismatch");
10 static_assert(ZMQ_IS_TRIVIALLY_COPYABLE(zmq::socket_ref),
11  "needs to be trivially copyable");
12 
13 TEST_CASE("socket_ref default init", "[socket_ref]")
14 {
15  zmq::socket_ref sr;
16  CHECK(!sr);
17  CHECK(sr == nullptr);
18  CHECK(nullptr == sr);
19  CHECK(sr.handle() == nullptr);
20 }
21 
22 TEST_CASE("socket_ref create from nullptr", "[socket_ref]")
23 {
24  zmq::socket_ref sr = nullptr;
25  CHECK(sr == nullptr);
26  CHECK(sr.handle() == nullptr);
27 }
28 
29 TEST_CASE("socket_ref create from handle", "[socket_ref]")
30 {
31  void *np = nullptr;
33  CHECK(sr == nullptr);
34  CHECK(sr.handle() == nullptr);
35 }
36 
37 TEST_CASE("socket_ref compare", "[socket_ref]")
38 {
39  zmq::socket_ref sr1;
40  zmq::socket_ref sr2;
41  CHECK(sr1 == sr2);
42  CHECK(!(sr1 != sr2));
43 }
44 
45 TEST_CASE("socket_ref compare from socket_t", "[socket_ref]")
46 {
47  zmq::context_t context;
48  zmq::socket_t s1(context, zmq::socket_type::router);
49  zmq::socket_t s2(context, zmq::socket_type::dealer);
50  zmq::socket_ref sr1 = s1;
51  zmq::socket_ref sr2 = s2;
52  CHECK(sr1);
53  CHECK(sr2);
54  CHECK(sr1 == s1);
55  CHECK(sr2 == s2);
56  CHECK(sr1.handle() == s1.handle());
57  CHECK(sr1 != sr2);
58  CHECK(sr1.handle() != sr2.handle());
59  CHECK(sr1 != nullptr);
60  CHECK(nullptr != sr1);
61  CHECK(sr2 != nullptr);
62  const bool comp1 = (sr1 < sr2) != (sr1 >= sr2);
63  CHECK(comp1);
64  const bool comp2 = (sr1 > sr2) != (sr1 <= sr2);
65  CHECK(comp2);
66  std::hash<zmq::socket_ref> hash;
67  CHECK(hash(sr1) != hash(sr2));
68  CHECK(hash(sr1) == hash(s1));
69 }
70 
71 TEST_CASE("socket_ref assignment", "[socket_ref]")
72 {
73  zmq::context_t context;
74  zmq::socket_t s1(context, zmq::socket_type::router);
75  zmq::socket_t s2(context, zmq::socket_type::dealer);
76  zmq::socket_ref sr1 = s1;
77  zmq::socket_ref sr2 = s2;
78  sr1 = s2;
79  CHECK(sr1 == sr2);
80  CHECK(sr1.handle() == sr2.handle());
81  sr1 = std::move(sr2);
82  CHECK(sr1 == sr2);
83  CHECK(sr1.handle() == sr2.handle());
84  sr2 = nullptr;
85  CHECK(sr1 != sr2);
86  sr1 = nullptr;
87  CHECK(sr1 == sr2);
88 }
89 
90 TEST_CASE("socket_ref swap", "[socket_ref]")
91 {
92  zmq::socket_ref sr1;
93  zmq::socket_ref sr2;
94  using std::swap;
95  swap(sr1, sr2);
96 }
97 
98 TEST_CASE("socket_ref type punning", "[socket_ref]")
99 {
100  struct SVP
101  {
102  void *p;
103  } svp;
104  struct SSR
105  {
106  zmq::socket_ref sr;
107  } ssr;
108 
109  zmq::context_t context;
110  zmq::socket_t socket(context, zmq::socket_type::router);
111  CHECK(socket.handle() != nullptr);
112  svp.p = socket.handle();
113  // static_cast to silence incorrect warning
114  std::memcpy(static_cast<void *>(&ssr), &svp, sizeof(ssr));
115  CHECK(ssr.sr == socket);
116 }
117 
118 #endif
TEST_CASE
TEST_CASE("context construct default and destroy", "[context]")
Definition: context.cpp:9
zmq::swap
void swap(message_t &a, message_t &b) ZMQ_NOTHROW
Definition: zmq.hpp:749
zmq::socket_t
Definition: zmq.hpp:2188
zmq::from_handle
ZMQ_CONSTEXPR_VAR from_handle_t from_handle
Definition: zmq.hpp:2109
zmq::socket_ref
Definition: zmq.hpp:2114
zmq.hpp
zmq::context_t
Definition: zmq.hpp:799
p
const char * p
Definition: gmock-matchers_test.cc:3863
std::swap
void swap(Json::Value &a, Json::Value &b)
Specialize std::swap() for Json::Value.
Definition: json.h:1226
CHECK
#define CHECK(x)
Definition: php/ext/google/protobuf/upb.c:8393


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