From d40d049c149fa0793aa4bf065450ea1fade805e2 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Tue, 29 Sep 2026 00:52:29 +0200 Subject: [PATCH] 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 --- include/nlohmann/detail/view/compare.hpp | 64 +++++++++++------------- single_include/nlohmann/json_view.hpp | 64 +++++++++++------------- tests/src/unit-json_view.cpp | 4 +- 3 files changed, 62 insertions(+), 70 deletions(-) diff --git a/include/nlohmann/detail/view/compare.hpp b/include/nlohmann/detail/view/compare.hpp index 551c4013e..44a8e1d5b 100644 --- a/include/nlohmann/detail/view/compare.hpp +++ b/include/nlohmann/detail/view/compare.hpp @@ -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 diff --git a/single_include/nlohmann/json_view.hpp b/single_include/nlohmann/json_view.hpp index 6928b7b7e..d17525c9f 100644 --- a/single_include/nlohmann/json_view.hpp +++ b/single_include/nlohmann/json_view.hpp @@ -1818,51 +1818,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 diff --git a/tests/src/unit-json_view.cpp b/tests/src/unit-json_view.cpp index 5f752fffe..e61f2d5d5 100644 --- a/tests/src/unit-json_view.cpp +++ b/tests/src/unit-json_view.cpp @@ -1252,9 +1252,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)); }