mirror of
https://github.com/nlohmann/json.git
synced 2024-11-24 14:59:00 +08:00
Merge pull request #1130 from agrianius/develop
test (non)equality for alt_string implementation
This commit is contained in:
commit
1c81e9f5ae
@ -33,6 +33,12 @@ SOFTWARE.
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
|
||||
/* forward declarations */
|
||||
class alt_string;
|
||||
bool operator<(const char* op1, const alt_string& op2);
|
||||
|
||||
|
||||
/*
|
||||
* This is virtually a string class.
|
||||
* It covers std::string under the hood.
|
||||
@ -60,17 +66,26 @@ class alt_string
|
||||
}
|
||||
|
||||
template <typename op_type>
|
||||
bool operator==(op_type&& op) const
|
||||
bool operator==(const op_type& op) const
|
||||
{
|
||||
return str_impl == op;
|
||||
}
|
||||
|
||||
bool operator==(const alt_string& op) const
|
||||
{
|
||||
return str_impl == op.str_impl;
|
||||
}
|
||||
|
||||
template <typename op_type>
|
||||
bool operator!=(op_type&& op) const
|
||||
bool operator!=(const op_type& op) const
|
||||
{
|
||||
return str_impl != op;
|
||||
}
|
||||
|
||||
bool operator!=(const alt_string& op) const {
|
||||
return str_impl != op.str_impl;
|
||||
}
|
||||
|
||||
std::size_t size() const noexcept
|
||||
{
|
||||
return str_impl.size();
|
||||
@ -87,7 +102,7 @@ class alt_string
|
||||
}
|
||||
|
||||
template <typename op_type>
|
||||
bool operator<(op_type&& op) const
|
||||
bool operator<(const op_type& op) const
|
||||
{
|
||||
return str_impl < op;
|
||||
}
|
||||
@ -134,6 +149,8 @@ class alt_string
|
||||
|
||||
private:
|
||||
std::string str_impl;
|
||||
|
||||
friend bool ::operator<(const char*, const alt_string&);
|
||||
};
|
||||
|
||||
|
||||
@ -149,6 +166,11 @@ using alt_json = nlohmann::basic_json <
|
||||
nlohmann::adl_serializer >;
|
||||
|
||||
|
||||
bool operator<(const char* op1, const alt_string& op2) {
|
||||
return op1 < op2.str_impl;
|
||||
}
|
||||
|
||||
|
||||
|
||||
TEST_CASE("alternative string type")
|
||||
{
|
||||
@ -210,4 +232,34 @@ TEST_CASE("alternative string type")
|
||||
alt_string dump = doc.dump();
|
||||
CHECK(dump == R"({"foo":"bar"})");
|
||||
}
|
||||
|
||||
SECTION("equality")
|
||||
{
|
||||
alt_json doc;
|
||||
doc["Who are you?"] = "I'm Batman";
|
||||
|
||||
CHECK("I'm Batman" == doc["Who are you?"]);
|
||||
CHECK(doc["Who are you?"] == "I'm Batman");
|
||||
CHECK_FALSE("I'm Batman" != doc["Who are you?"]);
|
||||
CHECK_FALSE(doc["Who are you?"] != "I'm Batman");
|
||||
|
||||
CHECK("I'm Bruce Wayne" != doc["Who are you?"]);
|
||||
CHECK(doc["Who are you?"] != "I'm Bruce Wayne");
|
||||
CHECK_FALSE("I'm Bruce Wayne" == doc["Who are you?"]);
|
||||
CHECK_FALSE(doc["Who are you?"] == "I'm Bruce Wayne");
|
||||
|
||||
{
|
||||
const alt_json& const_doc = doc;
|
||||
|
||||
CHECK("I'm Batman" == const_doc["Who are you?"]);
|
||||
CHECK(const_doc["Who are you?"] == "I'm Batman");
|
||||
CHECK_FALSE("I'm Batman" != const_doc["Who are you?"]);
|
||||
CHECK_FALSE(const_doc["Who are you?"] != "I'm Batman");
|
||||
|
||||
CHECK("I'm Bruce Wayne" != const_doc["Who are you?"]);
|
||||
CHECK(const_doc["Who are you?"] != "I'm Bruce Wayne");
|
||||
CHECK_FALSE("I'm Bruce Wayne" == const_doc["Who are you?"]);
|
||||
CHECK_FALSE(const_doc["Who are you?"] == "I'm Bruce Wayne");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user