From ea61e86d0fa25f02ecbf530fa55560724aff0a3e Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Sun, 9 Aug 2015 17:09:13 +0200 Subject: [PATCH] Add new tests for SearchInSortVector and GetRangeInSortVector Signed-off-by: Sven Strickroth --- src/Git/GitStatus.cpp | 7 +- src/Git/gitindex.h | 14 +++- test/UnitTests/GitIndexTest.cpp | 166 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 180 insertions(+), 7 deletions(-) diff --git a/src/Git/GitStatus.cpp b/src/Git/GitStatus.cpp index 6730c5681..39860922c 100644 --- a/src/Git/GitStatus.cpp +++ b/src/Git/GitStatus.cpp @@ -323,11 +323,6 @@ int GitStatus::IsIgnore(const CString &gitdir, const CString &path, bool *isIgno return 0; } -static bool SortFileName(CGitFileName &Item1, CGitFileName &Item2) -{ - return Item1.m_FileName.Compare(Item2.m_FileName)<0; -} - int GitStatus::GetFileList(CString path, std::vector &list) { path += _T("\\*.*"); @@ -360,7 +355,7 @@ int GitStatus::GetFileList(CString path, std::vector &list) FindClose(handle); - std::sort(list.begin(), list.end(), SortFileName); + std::sort(list.begin(), list.end(), SortCGitFileName); return 0; } diff --git a/src/Git/gitindex.h b/src/Git/gitindex.h index 117380c20..7f6f4947b 100644 --- a/src/Git/gitindex.h +++ b/src/Git/gitindex.h @@ -231,10 +231,22 @@ public: class CGitFileName { public: + CGitFileName() {} + CGitFileName(const CString& filename) + { + m_CaseFileName = filename; + m_FileName = filename; + m_FileName.MakeLower(); + } CString m_FileName; CString m_CaseFileName; }; +static bool SortCGitFileName(CGitFileName& item1, CGitFileName& item2) +{ + return item1.m_FileName.Compare(item2.m_FileName) < 0; +} + class CGitIgnoreItem { public: @@ -322,7 +334,7 @@ int GetRangeInSortVector(const T &vector, LPCTSTR pstr, int len, int *start, int *end =i; } } - return -1; + return (*start < 0) ? -1 : 0; } else { diff --git a/test/UnitTests/GitIndexTest.cpp b/test/UnitTests/GitIndexTest.cpp index 1270b7975..000b5b5b9 100644 --- a/test/UnitTests/GitIndexTest.cpp +++ b/test/UnitTests/GitIndexTest.cpp @@ -183,3 +183,169 @@ TEST_P(GitIndexCBasicGitWithTestRepoFixture, GetFileStatus) EXPECT_EQ(0, indexList.GetFileStatus(m_Dir.GetTempDir(), L"ansi.txt", &status, time, filesize)); EXPECT_EQ(git_wc_status_conflicted, status); } + +TEST(GitIndex, SearchInSortVector) +{ + std::vector vector; + EXPECT_EQ(-1, SearchInSortVector(vector, L"something", 9)); + EXPECT_EQ(-1, SearchInSortVector(vector, L"something", 0)); + EXPECT_EQ(-1, SearchInSortVector(vector, L"something", -1)); + + vector.push_back(CGitFileName(L"One")); + EXPECT_EQ(-1, SearchInSortVector(vector, L"something", 9)); + EXPECT_EQ(-1, SearchInSortVector(vector, L"something", -1)); + EXPECT_EQ(0, SearchInSortVector(vector, L"something", 0)); // do we really need this behavior? + EXPECT_EQ(0, SearchInSortVector(vector, L"one", 3)); + EXPECT_EQ(0, SearchInSortVector(vector, L"one", -1)); + EXPECT_EQ(-1, SearchInSortVector(vector, L"one/", 4)); + EXPECT_EQ(-1, SearchInSortVector(vector, L"One", 3)); + + vector.push_back(CGitFileName(L"tWo")); + EXPECT_EQ(-1, SearchInSortVector(vector, L"something", 9)); + EXPECT_EQ(0, SearchInSortVector(vector, L"one", 3)); + EXPECT_EQ(-1, SearchInSortVector(vector, L"One", 3)); + EXPECT_EQ(1, SearchInSortVector(vector, L"two", 3)); + EXPECT_EQ(-1, SearchInSortVector(vector, L"tWo", 3)); + EXPECT_EQ(1, SearchInSortVector(vector, L"t", 1)); + EXPECT_EQ(-1, SearchInSortVector(vector, L"0", 1)); + EXPECT_EQ(-1, SearchInSortVector(vector, L"z", 1)); + + vector.push_back(CGitFileName(L"a")); + vector.push_back(CGitFileName(L"b/1")); + vector.push_back(CGitFileName(L"b/2")); + vector.push_back(CGitFileName(L"b/3")); + vector.push_back(CGitFileName(L"b/4")); + vector.push_back(CGitFileName(L"b/5")); + std::sort(vector.begin(), vector.end(), SortCGitFileName); + EXPECT_EQ(2, SearchInSortVector(vector, L"b/2", 3)); + EXPECT_EQ(2, SearchInSortVector(vector, L"b/2", -1)); + EXPECT_EQ(3, SearchInSortVector(vector, L"b/", 2)); + EXPECT_EQ(-1, SearchInSortVector(vector, L"b/6", 3)); + EXPECT_EQ(0, SearchInSortVector(vector, L"a", 1)); + EXPECT_EQ(6, SearchInSortVector(vector, L"one", 3)); + EXPECT_EQ(7, SearchInSortVector(vector, L"two", 3)); +} + +TEST(GitIndex, GetRangeInSortVector) +{ + std::vector vector; + + int start = -2; + int end = -2; + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"something", 9, &start, &end, -1)); + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"something", 9, &start, &end, 0)); + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"something", 9, &start, nullptr, 0)); + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"something", 9, nullptr, &end, 0)); + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"something", 9, nullptr, &end, 1)); + + vector.push_back(CGitFileName(L"a")); + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"something", 9, &start, &end, -1)); + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"something", 9, &start, nullptr, 0)); + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"something", 9, nullptr, &end, 0)); + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"something", 9, nullptr, &end, 1)); + + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"a", 1, &start, &end, -1)); + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"a", 1, &start, nullptr, 0)); + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"a", 1, nullptr, &end, 0)); + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"a", 1, nullptr, &end, 1)); + + start = end = -2; + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"0", 1, &start, &end, 0)); + EXPECT_EQ(-1, start); + EXPECT_EQ(-1, end); + start = end = -2; + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"b", 1, &start, &end, 0)); + EXPECT_EQ(-1, start); + EXPECT_EQ(-1, end); + + start = end = -2; + EXPECT_EQ(0, GetRangeInSortVector(vector, L"a", 1, &start, &end, 0)); + EXPECT_EQ(0, start); + EXPECT_EQ(0, end); + + vector.push_back(CGitFileName(L"b/1")); + vector.push_back(CGitFileName(L"b/2")); + vector.push_back(CGitFileName(L"b/3")); + vector.push_back(CGitFileName(L"b/4")); + vector.push_back(CGitFileName(L"b/5")); + + start = end = -2; + EXPECT_EQ(0, GetRangeInSortVector(vector, L"a", 1, &start, &end, 0)); + EXPECT_EQ(0, start); + EXPECT_EQ(0, end); + + start = end = -2; + EXPECT_EQ(0, GetRangeInSortVector(vector, L"b/", 2, &start, &end, 0)); + EXPECT_EQ(1, start); + EXPECT_EQ(5, end); + + start = end = -2; + EXPECT_EQ(0, GetRangeInSortVector(vector, L"b/", 2, &start, &end, 1)); + EXPECT_EQ(1, start); + EXPECT_EQ(5, end); + + start = end = -2; + EXPECT_EQ(0, GetRangeInSortVector(vector, L"b/", 2, &start, &end, 2)); + EXPECT_EQ(1, start); + EXPECT_EQ(5, end); + + start = end = -2; + EXPECT_EQ(0, GetRangeInSortVector(vector, L"b/", 2, &start, &end, 4)); + EXPECT_EQ(1, start); + EXPECT_EQ(5, end); + + start = end = -2; + EXPECT_EQ(0, GetRangeInSortVector(vector, L"b/", 2, &start, &end, 5)); + EXPECT_EQ(1, start); + EXPECT_EQ(5, end); + + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"b/", 2, &start, &end, 6)); // 6 is >= vector.size() + + start = end = -2; + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"c/", 2, &start, &end, 0)); + EXPECT_EQ(-1, start); + EXPECT_EQ(-1, end); + + start = end = -2; + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"c/", 2, &start, &end, 5)); + EXPECT_EQ(-1, start); + EXPECT_EQ(-1, end); + + vector.push_back(CGitFileName(L"c")); + vector.push_back(CGitFileName(L"d")); + + start = end = -2; + EXPECT_EQ(0, GetRangeInSortVector(vector, L"b/", 2, &start, &end, 1)); + EXPECT_EQ(1, start); + EXPECT_EQ(5, end); + + start = end = -2; + EXPECT_EQ(0, GetRangeInSortVector(vector, L"b/", 2, &start, &end, 2)); + EXPECT_EQ(1, start); + EXPECT_EQ(5, end); + + start = end = -2; + EXPECT_EQ(0, GetRangeInSortVector(vector, L"b/", 2, &start, &end, 4)); + EXPECT_EQ(1, start); + EXPECT_EQ(5, end); + + start = end = -2; + EXPECT_EQ(0, GetRangeInSortVector(vector, L"b/", 2, &start, &end, 5)); + EXPECT_EQ(1, start); + EXPECT_EQ(5, end); + + start = end = -2; + EXPECT_EQ(0, GetRangeInSortVector(vector, L"b/", 2, &start, &end, 6)); + EXPECT_EQ(1, start); + EXPECT_EQ(5, end); + + start = end = -2; + EXPECT_EQ(-1, GetRangeInSortVector(vector, L"c/", 2, &start, &end, 6)); + EXPECT_EQ(-1, start); + EXPECT_EQ(-1, end); + + start = end = -2; + EXPECT_EQ(0, GetRangeInSortVector(vector, L"c", 1, &start, &end, 6)); + EXPECT_EQ(6, start); + EXPECT_EQ(6, end); +} -- 2.11.4.GIT