Address the clang-tidy findings of the comparisons

Separate the comparison of discarded values from the other types, so
that the conditional chain has no repeated branch bodies, and mark
the deliberate comparisons of views with empty containers in the
tests.

Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
Niels Lohmann
2026-09-29 14:03:01 +02:00
parent f57de1aa0a
commit 20fd4c6a8b
3 changed files with 62 additions and 70 deletions
+30 -34
View File
@@ -234,51 +234,47 @@ bool equal(const A& a0, const B& b0)
return false;
}
}
else if (numbers)
else
{
if (!(a.scalar() == b.scalar()))
if (!numbers && ta != tb)
{
return false;
}
}
else if (ta != tb)
{
return false;
}
else if (ta == value_t::string)
{
if (!(a.string() == b.string()))
if (ta == value_t::string)
{
return false;
}
}
else if (ta == value_t::array || ta == value_t::object)
{
if (a.size() != b.size() && ta == value_t::array)
{
return false;
}
frame f;
f.object = ta == value_t::object;
if (f.object)
{
a.members(f.members_a, ordered);
b.members(f.members_b, ordered);
if (f.members_a.size() != f.members_b.size())
if (!(a.string() == b.string()))
{
return false;
}
}
else
else if (ta == value_t::array || ta == value_t::object)
{
a.elements(f.elements_a);
b.elements(f.elements_b);
if (a.size() != b.size() && ta == value_t::array)
{
return false;
}
frame f;
f.object = ta == value_t::object;
if (f.object)
{
a.members(f.members_a, ordered);
b.members(f.members_b, ordered);
if (f.members_a.size() != f.members_b.size())
{
return false;
}
}
else
{
a.elements(f.elements_a);
b.elements(f.elements_b);
}
stack.push_back(std::move(f));
}
else if (!(a.scalar() == b.scalar())) // numbers (also of different types), null, boolean
{
return false;
}
stack.push_back(std::move(f));
}
else if (!(a.scalar() == b.scalar())) // null, boolean
{
return false;
}
// the next pair of values
+30 -34
View File
@@ -1805,51 +1805,47 @@ bool equal(const A& a0, const B& b0)
return false;
}
}
else if (numbers)
else
{
if (!(a.scalar() == b.scalar()))
if (!numbers && ta != tb)
{
return false;
}
}
else if (ta != tb)
{
return false;
}
else if (ta == value_t::string)
{
if (!(a.string() == b.string()))
if (ta == value_t::string)
{
return false;
}
}
else if (ta == value_t::array || ta == value_t::object)
{
if (a.size() != b.size() && ta == value_t::array)
{
return false;
}
frame f;
f.object = ta == value_t::object;
if (f.object)
{
a.members(f.members_a, ordered);
b.members(f.members_b, ordered);
if (f.members_a.size() != f.members_b.size())
if (!(a.string() == b.string()))
{
return false;
}
}
else
else if (ta == value_t::array || ta == value_t::object)
{
a.elements(f.elements_a);
b.elements(f.elements_b);
if (a.size() != b.size() && ta == value_t::array)
{
return false;
}
frame f;
f.object = ta == value_t::object;
if (f.object)
{
a.members(f.members_a, ordered);
b.members(f.members_b, ordered);
if (f.members_a.size() != f.members_b.size())
{
return false;
}
}
else
{
a.elements(f.elements_a);
b.elements(f.elements_b);
}
stack.push_back(std::move(f));
}
else if (!(a.scalar() == b.scalar())) // numbers (also of different types), null, boolean
{
return false;
}
stack.push_back(std::move(f));
}
else if (!(a.scalar() == b.scalar())) // null, boolean
{
return false;
}
// the next pair of values
+2 -2
View File
@@ -1197,9 +1197,9 @@ TEST_CASE("json_view comparison")
// discarded values compare as basic_json's do
const json discarded(json::value_t::discarded);
CHECK((json_view() == json_view()) == (discarded == discarded));
CHECK((json_view() == json_view()) == (discarded == discarded)); // NOLINT(readability-container-size-empty): operator== is tested
CHECK((json_view() == discarded) == (discarded == discarded));
CHECK(!(json_view() == json_document::parse("null").root()));
CHECK(!(json_view() == json_document::parse("null").root())); // NOLINT(readability-container-size-empty)
CHECK(!(json_document::parse("null").root() == discarded));
}