Skip to content

Commit

Permalink
autocomplete-improvement
Browse files Browse the repository at this point in the history
  • Loading branch information
StekPerepolnen committed May 8, 2024
1 parent 0ee8bbf commit 79157d6
Showing 1 changed file with 41 additions and 50 deletions.
91 changes: 41 additions & 50 deletions ydb/core/viewer/viewer_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1049,64 +1049,55 @@ Y_UNIT_TEST_SUITE(Viewer) {
UNIT_ASSERT_VALUES_EQUAL(LevenshteinDistance("/slice/db", "/slice/db26000"), 5);
}

Y_UNIT_TEST(FuzzySearcher)
{
TVector<TString> dictionary = { "/slice", "/slice/db", "/slice/db26000" };

{
TVector<TString> expectations = { "/slice/db" };
auto fuzzy = FuzzySearcher<TString>(dictionary);
auto result = fuzzy.Search("/slice/db", 1);

UNIT_ASSERT_VALUES_EQUAL(expectations.size(), result.size());
for (ui32 i = 0; i < expectations.size(); i++) {
UNIT_ASSERT_VALUES_EQUAL(expectations[i], result[i]);
}
TVector<TString> SimilarWordsDictionary = { "/slice", "/slice/db", "/slice/db26000" };
TVector<TString> DifferentWordsDictionary = { "/orders", "/peoples", "/OrdinaryScheduleTables" };
TVector<TString> DifferentWs = { "/.sys", "/.sys_health" };

void FuzzySearcherTest(TVector<TString>& dictionary, TString search, ui32 limit, TVector<TString> expectations) {
auto fuzzy = FuzzySearcher<TString>(dictionary);
auto result = fuzzy.Search(search, limit);

UNIT_ASSERT_VALUES_EQUAL(expectations.size(), result.size());
for (ui32 i = 0; i < expectations.size(); i++) {
Cerr << "expectations[i] " << expectations[i] << ", result[i] " << result[i] << Endl;
UNIT_ASSERT_VALUES_EQUAL(expectations[i], result[i]);
}
}

{
TVector<TString> expectations = { "/slice/db", "/slice" };
auto fuzzy = FuzzySearcher<TString>(dictionary);
auto result = fuzzy.Search("/slice/db", 2);

UNIT_ASSERT_VALUES_EQUAL(expectations.size(), result.size());
for (ui32 i = 0; i < expectations.size(); i++) {
UNIT_ASSERT_VALUES_EQUAL(expectations[i], result[i]);
}
}
Y_UNIT_TEST(FuzzySearcher10000)
{
FuzzySearcherTest(DifferentWs, "", 3, { "/.sys", "/.sys_health" });
}

{
TVector<TString> expectations = { "/slice/db", "/slice", "/slice/db26000"};
auto fuzzy = FuzzySearcher<TString>(dictionary);
auto result = fuzzy.Search("/slice/db", 3);
Y_UNIT_TEST(FuzzySearcherLimit1OutOf4)
{
FuzzySearcherTest(SimilarWordsDictionary, "/slice/db", 1, { "/slice/db" });
}

UNIT_ASSERT_VALUES_EQUAL(expectations.size(), result.size());
for (ui32 i = 0; i < expectations.size(); i++) {
UNIT_ASSERT_VALUES_EQUAL(expectations[i], result[i]);
}
}
Y_UNIT_TEST(FuzzySearcherLimit2OutOf4)
{
FuzzySearcherTest(SimilarWordsDictionary, "/slice/db", 2, { "/slice/db", "/slice/db26000" });
}

{
TVector<TString> expectations = { "/slice/db", "/slice", "/slice/db26000" };
auto fuzzy = FuzzySearcher<TString>(dictionary);
auto result = fuzzy.Search("/slice/db", 4);
Y_UNIT_TEST(FuzzySearcherLimit3OutOf4)
{
FuzzySearcherTest(SimilarWordsDictionary, "/slice/db", 3, { "/slice/db", "/slice/db26000", "/slice"});
}

UNIT_ASSERT_VALUES_EQUAL(expectations.size(), result.size());
for (ui32 i = 0; i < expectations.size(); i++) {
UNIT_ASSERT_VALUES_EQUAL(expectations[i], result[i]);
}
}
Y_UNIT_TEST(FuzzySearcherLimit4OutOf4)
{
FuzzySearcherTest(SimilarWordsDictionary, "/slice/db", 4, { "/slice/db", "/slice/db26000", "/slice"});
}

{
TVector<TString> expectations = { "/slice/db26000", "/slice/db", "/slice" };
auto fuzzy = FuzzySearcher<TString>(dictionary);
auto result = fuzzy.Search("/slice/db26001");
Y_UNIT_TEST(FuzzySearcherLongWord)
{
FuzzySearcherTest(SimilarWordsDictionary, "/slice/db26001", 10, { "/slice/db26000", "/slice/db", "/slice"});
}

UNIT_ASSERT_VALUES_EQUAL(expectations.size(), result.size());
for (ui32 i = 0; i < expectations.size(); i++) {
UNIT_ASSERT_VALUES_EQUAL(expectations[i], result[i]);
}
}
Y_UNIT_TEST(FuzzySearcherPriority)
{
FuzzySearcherTest(DifferentWordsDictionary, "/ord", 10, { "/orders", "/OrdinaryScheduleTables", "/peoples"});
FuzzySearcherTest(DifferentWordsDictionary, "Tables", 10, { "/OrdinaryScheduleTables", "/orders", "/peoples"});
}

void JsonAutocompleteTest(HTTP_METHOD method, NJson::TJsonValue& value, TString prefix = "", TString database = "", TVector<TString> tables = {}, ui32 limit = 10, bool lowerCaseContentType = false) {
Expand Down

0 comments on commit 79157d6

Please sign in to comment.