diff --git a/tests/multipart.cpp b/tests/multipart.cpp index 0910bba9..7d92b979 100644 --- a/tests/multipart.cpp +++ b/tests/multipart.cpp @@ -75,6 +75,21 @@ TEST_CASE("multipart legacy test", "[multipart]") assert(ok); assert(copy.equal(&multipart)); + // Test equality operators + assert(copy == multipart); + assert(multipart == copy); + + multipart.pop(); + + assert(copy != multipart); + assert(multipart != copy); + + multipart_t emptyMessage1 {}; + multipart_t emptyMessage2 {}; + + assert(emptyMessage1 == emptyMessage2); + assert(emptyMessage2 == emptyMessage1); + multipart.clear(); assert(multipart.empty()); diff --git a/zmq_addon.hpp b/zmq_addon.hpp index 4c36d6e2..147abe14 100644 --- a/zmq_addon.hpp +++ b/zmq_addon.hpp @@ -612,16 +612,26 @@ class multipart_t } // Check if equal to other multipart - bool equal(const multipart_t *other) const + bool equal(const multipart_t *other) const ZMQ_NOTHROW { - if (size() != other->size()) + return *this == *other; + } + + bool operator==(const multipart_t &other) const ZMQ_NOTHROW + { + if (size() != other.size()) return false; for (size_t i = 0; i < size(); i++) - if (*peek(i) != *other->peek(i)) + if (at(i) != other.at(i)) return false; return true; } + bool operator!=(const multipart_t &other) const ZMQ_NOTHROW + { + return !(*this == other); + } + #ifdef ZMQ_CPP11 // Return single part message_t encoded from this multipart_t.