Tweak RankedMatch behaviour and fix bug in its comparison function

casting TestableFlag<T> to UnderlyingType<T> was going through bool
conversion... Not sure how things worked earlier.
This commit is contained in:
Maxime Coste 2016-11-14 19:14:09 +00:00
parent b3ba769220
commit 6d79ade019
3 changed files with 9 additions and 6 deletions

View File

@ -37,6 +37,7 @@ struct TestableFlags
Flags value;
constexpr operator bool() const { return (UnderlyingType<Flags>)value; }
constexpr operator Flags() const { return value; }
constexpr operator UnderlyingType<Flags>() const { return (UnderlyingType<Flags>)value; }
bool operator==(const TestableFlags<Flags>& other) const { return value == other.value; }
bool operator!=(const TestableFlags<Flags>& other) const { return value != other.value; }

View File

@ -216,6 +216,8 @@ UnitTest test_ranked_match{[] {
kak_assert(not (RankedMatch{"source", "so"} < RankedMatch{"source", "so"}));
kak_assert(RankedMatch{"single/word", "wo"} < RankedMatch{"multiw/ord", "wo"});
kak_assert(RankedMatch{"foo/bar/foobar", "foobar"} < RankedMatch{"foo/bar/baz", "foobar"});
kak_assert(RankedMatch{"delete-buffer", "db"} < RankedMatch{"debug", "db"});
kak_assert(RankedMatch{"create_task", "ct"} < RankedMatch{"constructor", "ct"});
}};
UnitTest test_used_letters{[]()

View File

@ -37,12 +37,12 @@ private:
{
None = 0,
// Order is important, the highest bit has precedence for comparison
OnlyWordBoundary = 1 << 0,
FirstCharMatch = 1 << 1,
Prefix = 1 << 2,
SingleWord = 1 << 3,
Contiguous = 1 << 4,
FullMatch = 1 << 5,
FirstCharMatch = 1 << 0,
SingleWord = 1 << 1,
Contiguous = 1 << 2,
OnlyWordBoundary = 1 << 3,
Prefix = 1 << 4,
FullMatch = 1 << 5,
};
StringView m_candidate;