Clang: Improve modified timer checker

Make the algorithm a little bit more clear.

Change-Id: I71b04cdd947272edf9fade8f93b7300a945a2fc8
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Marco Bubke
2019-07-16 20:42:54 +02:00
parent 8c1b803fad
commit 4e5e4899d5
3 changed files with 21 additions and 10 deletions

View File

@@ -83,12 +83,12 @@ public:
private:
bool compareEntries(const SourceEntries &sourceEntries) const
{
return set_intersection_compare(
return !set_intersection_compare(
m_currentSourceTimeStamps.begin(),
m_currentSourceTimeStamps.end(),
sourceEntries.begin(),
sourceEntries.end(),
[](auto first, auto second) { return second.timeStamp > first.timeStamp; },
[](auto first, auto second) { return first.timeStamp > second.timeStamp; },
[](auto first, auto second) { return first.sourceId < second.sourceId; });
}

View File

@@ -89,13 +89,13 @@ bool set_intersection_compare(
++first1;
} else {
if (!comp(*first2, *first1)) {
if (call(*first2, *first1++))
return false;
if (call(*first1++, *first2))
return true;
}
++first2;
}
}
return true;
return false;
}
} // namespace ClangBackEnd

View File

@@ -50,13 +50,17 @@ protected:
NiceMock<MockFileSystem> mockFileSystem;
ClangBackEnd::ModifiedTimeChecker<> checker{mockFileSystem};
SourceEntries upToDateEntries = {{1, SourceType::UserInclude, 100},
SourceEntries upToDateEntries = {{1, SourceType::UserInclude, 51},
{2, SourceType::SystemInclude, 30},
{3, SourceType::UserInclude, 100},
{3, SourceType::UserInclude, 50},
{4, SourceType::SystemInclude, 31}};
SourceEntries equalEntries = {{1, SourceType::UserInclude, 50},
{2, SourceType::SystemInclude, 30},
{3, SourceType::UserInclude, 50},
{4, SourceType::SystemInclude, 30}};
SourceEntries notUpToDateEntries = {{1, SourceType::UserInclude, 50},
{2, SourceType::SystemInclude, 20},
{3, SourceType::UserInclude, 100},
{2, SourceType::SystemInclude, 29},
{3, SourceType::UserInclude, 50},
{4, SourceType::SystemInclude, 30}};
};
@@ -67,6 +71,13 @@ TEST_F(ModifiedTimeChecker, IsUpToDate)
ASSERT_TRUE(isUpToDate);
}
TEST_F(ModifiedTimeChecker, EqualEntriesAreUpToDate)
{
auto isUpToDate = checker.isUpToDate(equalEntries);
ASSERT_TRUE(isUpToDate);
}
TEST_F(ModifiedTimeChecker, IsUpToDateSecondRun)
{
checker.isUpToDate(upToDateEntries);