diff --git a/src/impl/winmd_reader/filter.h b/src/impl/winmd_reader/filter.h index 443db63..5869019 100644 --- a/src/impl/winmd_reader/filter.h +++ b/src/impl/winmd_reader/filter.h @@ -20,8 +20,7 @@ namespace winmd::reader std::sort(m_rules.begin(), m_rules.end(), [](auto const& lhs, auto const& rhs) { - auto size_compare = int(lhs.first.size()) - int(rhs.first.size()); - return (size_compare > 0) || ((size_compare == 0) && !lhs.second); + return std::pair{ lhs.first.size(), lhs.second } > std::pair{ rhs.first.size(), rhs.second }; }); } diff --git a/test/filter.cpp b/test/filter.cpp new file mode 100644 index 0000000..457921a --- /dev/null +++ b/test/filter.cpp @@ -0,0 +1,40 @@ +#include "pch.h" +#include + +using namespace winmd::reader; + +TEST_CASE("filter_simple") +{ + std::vector include = { "N1", "N3", "N3.N4.N5" }; + std::vector exclude = { "N2", "N3.N4" }; + + filter f{ include, exclude }; + + REQUIRE(!f.empty()); + + REQUIRE(!f.includes("NN.T")); + + REQUIRE(f.includes("N1.T")); + REQUIRE(f.includes("N3.T")); + + REQUIRE(!f.includes("N2.T")); + REQUIRE(!f.includes("N3.N4.T")); + + REQUIRE(f.includes("N3.N4.N5.T")); +} + +TEST_CASE("filter_excludes_same_length") +{ + std::vector include = { "N.N1", "N.N2" }; + std::vector exclude = { "N.N3", "N.N4" }; + + filter f{ include, exclude }; + + REQUIRE(!f.empty()); + + REQUIRE(f.includes("N.N1.T")); + REQUIRE(f.includes("N.N2.T")); + + REQUIRE(!f.includes("N.N3.T")); + REQUIRE(!f.includes("N.N4.T")); +} diff --git a/test/winmd.vcxproj b/test/winmd.vcxproj index 2caacf4..f02ef5d 100644 --- a/test/winmd.vcxproj +++ b/test/winmd.vcxproj @@ -21,6 +21,7 @@ + NotUsing NotUsing