LeechCraft 0.6.70-16373-g319c272718
Modular cross-platform feature rich live environment.
Loading...
Searching...
No Matches
stringpathtrietest.cpp
Go to the documentation of this file.
1/**********************************************************************
2 * LeechCraft - modular cross-platform feature rich internet client.
3 * Copyright (C) 2006-2014 Georg Rudoy
4 *
5 * Distributed under the Boost Software License, Version 1.0.
6 * (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7 **********************************************************************/
8
10#include <QtTest>
11#include <util/sll/prelude.h>
12#include <stringpathtrie.h>
13
14QTEST_APPLESS_MAIN (LC::Util::StringPathTrieTest)
15
16namespace LC::Util
17{
19
21
22 QVector<QStringView> AsRefs (const QVector<QString>& lst)
23 {
24 return Util::Map (lst, [] (const auto& str) { return QStringView { str }; });
25 }
26
27 void StringPathTrieTest::testEmptyTrie ()
28 {
30
31 QCOMPARE (trie.Find (AsRefs ({ "foo", "bar", "baz" })), (FindResult { std::optional<int> {}, 3 }));
32 }
33
34 void StringPathTrieTest::testEmptyQuery ()
35 {
37 trie.Add (AsRefs ({ "foo", "bar", "baz" }), 10);
38
39 QCOMPARE (trie.Find (AsRefs ({})), FindResult { std::optional<int> {} });
40 }
41
42 void StringPathTrieTest::testExactMatchSingle ()
43 {
45 trie.Add (AsRefs ({ "foo", "bar", "baz" }), 10);
46
47 QCOMPARE (trie.Find (AsRefs ({ "foo", "bar", "baz" })), FindResult { std::optional<int> { 10 } });
48 }
49
50 void StringPathTrieTest::testExactMatchOverwriteSingle ()
51 {
53 trie.Add (AsRefs ({ "foo", "bar", "baz" }), 10);
54 trie.Add (AsRefs ({ "foo", "bar", "baz" }), 20);
55
56 QCOMPARE (trie.Find (AsRefs ({ "foo", "bar", "baz" })), FindResult { std::optional<int> { 20 } });
57 }
58
59 void StringPathTrieTest::testExactMatchMulti ()
60 {
62 trie.Add (AsRefs ({ "foo", "bar", "baz1" }), 10);
63 trie.Add (AsRefs ({ "foo", "bar", "baz2" }), 20);
64
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 } });
67 }
68
69 void StringPathTrieTest::testExactMatchParentPre ()
70 {
72 trie.Add (AsRefs ({ "foo", "bar" }), 10);
73 trie.Add (AsRefs ({ "foo", "bar", "baz" }), 20);
74
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 } });
77 }
78
79 void StringPathTrieTest::testExactMatchParentPost ()
80 {
82 trie.Add (AsRefs ({ "foo", "bar", "baz" }), 20);
83 trie.Add (AsRefs ({ "foo", "bar" }), 10);
84
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 } });
87 }
88
89 void StringPathTrieTest::testPartialMatchLongerQuery ()
90 {
92 trie.Add (AsRefs ({ "foo" }), 20);
93 trie.Add (AsRefs ({ "foo", "bar" }), 10);
94
95 QCOMPARE (trie.Find (AsRefs ({ "foo", "bar", "baz" })), (FindResult { std::optional<int> { 10 }, 1 }));
96 }
97
98 void StringPathTrieTest::testPartialMatchLongerQueryWithChildren ()
99 {
101 trie.Add (AsRefs ({ "foo" }), 20);
102 trie.Add (AsRefs ({ "foo", "bar" }), 10);
103 trie.Add (AsRefs ({ "foo", "bar", "c1" }), 30);
104
105 QCOMPARE (trie.Find (AsRefs ({ "foo", "bar", "baz" })), (FindResult { std::optional<int> { 10 }, 1 }));
106
107 trie.Add (AsRefs ({ "foo", "bar", "c2" }), 30);
108
109 QCOMPARE (trie.Find (AsRefs ({ "foo", "bar", "baz" })), (FindResult { std::optional<int> { 10 }, 1 }));
110 }
111
112 void StringPathTrieTest::testPartialMatchShorterQuery ()
113 {
115 trie.Add (AsRefs ({ "foo", "bar" }), 20);
116 trie.Add (AsRefs ({ "foo", "bar", "baz" }), 10);
117
118 QCOMPARE (trie.Find (AsRefs ({ "foo" })).Value_, std::optional<int> {});
119 }
120}
Container< T > Filter(const Container< T > &c, F f)
Definition prelude.h:118
StringPathTrie< int > IntTrie
auto Map(Container &&c, F &&f) noexcept(noexcept(std::is_nothrow_invocable_v< F, decltype(*c.begin())>))
Definition prelude.h:104
QVector< QStringView > AsRefs(const QVector< QString > &lst)
IntTrie::FindResult FindResult
const QVariant Value_
Definition plotitem.cpp:74