18 using IntTrie = StringPathTrie<int>;
22 QVector<QStringView>
AsRefs (
const QVector<QString>& lst)
24 return Util::Map (lst, [] (
const auto& str) {
return QStringView { str }; });
27 void StringPathTrieTest::testEmptyTrie ()
31 QCOMPARE (trie.
Find (
AsRefs ({
"foo",
"bar",
"baz" })), (
FindResult { std::optional<int> {}, 3 }));
34 void StringPathTrieTest::testEmptyQuery ()
37 trie.Add (
AsRefs ({
"foo",
"bar",
"baz" }), 10);
42 void StringPathTrieTest::testExactMatchSingle ()
45 trie.Add (
AsRefs ({
"foo",
"bar",
"baz" }), 10);
47 QCOMPARE (trie.Find (
AsRefs ({
"foo",
"bar",
"baz" })),
FindResult { std::optional<int> { 10 } });
50 void StringPathTrieTest::testExactMatchOverwriteSingle ()
53 trie.Add (
AsRefs ({
"foo",
"bar",
"baz" }), 10);
54 trie.Add (
AsRefs ({
"foo",
"bar",
"baz" }), 20);
56 QCOMPARE (trie.Find (
AsRefs ({
"foo",
"bar",
"baz" })),
FindResult { std::optional<int> { 20 } });
59 void StringPathTrieTest::testExactMatchMulti ()
62 trie.Add (
AsRefs ({
"foo",
"bar",
"baz1" }), 10);
63 trie.Add (
AsRefs ({
"foo",
"bar",
"baz2" }), 20);
65 QCOMPARE (trie.Find (
AsRefs ({
"foo",
"bar",
"baz1" })),
FindResult { std::optional<int> { 10 } });
66 QCOMPARE (trie.Find (
AsRefs ({
"foo",
"bar",
"baz2" })),
FindResult { std::optional<int> { 20 } });
69 void StringPathTrieTest::testExactMatchParentPre ()
72 trie.Add (
AsRefs ({
"foo",
"bar" }), 10);
73 trie.Add (
AsRefs ({
"foo",
"bar",
"baz" }), 20);
75 QCOMPARE (trie.Find (
AsRefs ({
"foo",
"bar" })),
FindResult { std::optional<int> { 10 } });
76 QCOMPARE (trie.Find (
AsRefs ({
"foo",
"bar",
"baz" })),
FindResult { std::optional<int> { 20 } });
79 void StringPathTrieTest::testExactMatchParentPost ()
82 trie.Add (
AsRefs ({
"foo",
"bar",
"baz" }), 20);
83 trie.Add (
AsRefs ({
"foo",
"bar" }), 10);
85 QCOMPARE (trie.Find (
AsRefs ({
"foo",
"bar" })),
FindResult { std::optional<int> { 10 } });
86 QCOMPARE (trie.Find (
AsRefs ({
"foo",
"bar",
"baz" })),
FindResult { std::optional<int> { 20 } });
89 void StringPathTrieTest::testPartialMatchLongerQuery ()
92 trie.Add (
AsRefs ({
"foo" }), 20);
93 trie.Add (
AsRefs ({
"foo",
"bar" }), 10);
95 QCOMPARE (trie.Find (
AsRefs ({
"foo",
"bar",
"baz" })), (
FindResult { std::optional<int> { 10 }, 1 }));
98 void StringPathTrieTest::testPartialMatchLongerQueryWithChildren ()
101 trie.Add (
AsRefs ({
"foo" }), 20);
102 trie.Add (
AsRefs ({
"foo",
"bar" }), 10);
103 trie.Add (
AsRefs ({
"foo",
"bar",
"c1" }), 30);
105 QCOMPARE (trie.Find (
AsRefs ({
"foo",
"bar",
"baz" })), (
FindResult { std::optional<int> { 10 }, 1 }));
107 trie.Add (
AsRefs ({
"foo",
"bar",
"c2" }), 30);
109 QCOMPARE (trie.Find (
AsRefs ({
"foo",
"bar",
"baz" })), (
FindResult { std::optional<int> { 10 }, 1 }));
112 void StringPathTrieTest::testPartialMatchShorterQuery ()
115 trie.Add (
AsRefs ({
"foo",
"bar" }), 20);
116 trie.Add (
AsRefs ({
"foo",
"bar",
"baz" }), 10);
118 QCOMPARE (trie.Find (
AsRefs ({
"foo" })).
Value_, std::optional<int> {});