Skip to content

Commit 286781f

Browse files
author
David Ungar
committed
Add a unit test for an individual node change, & add ability to set fingerprints in unit tests.
1 parent 2e1e428 commit 286781f

File tree

4 files changed

+44
-2
lines changed

4 files changed

+44
-2
lines changed

include/swift/Driver/FineGrainedDependencyDriverGraph.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ class ModuleDepGraph {
437437
/// Call \p fn for each node whose key matches \p key.
438438
void
439439
forEachMatchingNode(const DependencyKey &key,
440-
function_ref<void(const ModuleDepGraphNode *)>) const;
440+
function_ref<void(ModuleDepGraphNode *)>) const;
441441

442442
void forEachNodeInJob(StringRef swiftDeps,
443443
function_ref<void(ModuleDepGraphNode *)>) const;

lib/Driver/FineGrainedDependencyDriverGraph.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,11 @@ ModuleDepGraph::findJobsToRecompileWhenNodesChange<
171171
std::unordered_set<ModuleDepGraphNode *>>(
172172
const std::unordered_set<ModuleDepGraphNode *> &);
173173

174+
template std::vector<const Job *>
175+
ModuleDepGraph::findJobsToRecompileWhenNodesChange<
176+
std::vector<ModuleDepGraphNode *>>(
177+
const std::vector<ModuleDepGraphNode *> &);
178+
174179
std::vector<std::string> ModuleDepGraph::computeSwiftDepsFromNodes(
175180
ArrayRef<const ModuleDepGraphNode *> nodes) const {
176181
llvm::StringSet<> swiftDepsOfNodes;
@@ -441,7 +446,7 @@ void ModuleDepGraph::forEachNode(
441446

442447
void ModuleDepGraph::forEachMatchingNode(
443448
const DependencyKey &key,
444-
function_ref<void(const ModuleDepGraphNode *)> fn) const {
449+
function_ref<void(ModuleDepGraphNode *)> fn) const {
445450
nodeMap.forEachValueMatching(
446451
key, [&](const std::string &, ModuleDepGraphNode *n) { fn(n); });
447452
}

unittests/Driver/FineGrainedDependencyGraphTests.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -808,3 +808,19 @@ TEST(ModuleDepGraph, MutualInterfaceHash) {
808808
const auto jobs = graph.findJobsToRecompileWhenWholeJobChanges(&job0);
809809
EXPECT_TRUE(contains(jobs, &job1));
810810
}
811+
812+
TEST(ModuleDepGraph, DisabledTypeBodyFingerprints) {
813+
ModuleDepGraph graph(/*EnableTypeFingerprints=*/ false);
814+
815+
graph.simulateLoad(&job0, {{dependsNominal, {"B2"}}});
816+
graph.simulateLoad(&job1, {{providesNominal, {"B1", "B2"}}});
817+
graph.simulateLoad(&job2, {{dependsNominal, {"B1"}}});
818+
819+
{
820+
const auto jobs = graph.findJobsToRecompileWhenWholeJobChanges(&job1);
821+
EXPECT_EQ(3u, jobs.size());
822+
EXPECT_TRUE(contains(jobs, &job0));
823+
EXPECT_TRUE(contains(jobs, &job1));
824+
EXPECT_TRUE(contains(jobs, &job2));
825+
}
826+
}

unittests/Driver/TypeBodyFingerprintsDependencyGraphTests.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -808,3 +808,24 @@ TEST(ModuleDepGraphWithTypeBodyFingerprints, MutualInterfaceHash) {
808808
const auto jobs = graph.findJobsToRecompileWhenWholeJobChanges(&job0);
809809
EXPECT_TRUE(contains(jobs, &job1));
810810
}
811+
812+
TEST(ModuleDepGraph, EnabledTypeBodyFingerprints) {
813+
ModuleDepGraph graph(/*EnableTypeFingerprints=*/ true);
814+
815+
graph.simulateLoad(&job0, {{dependsNominal, {"B2"}}});
816+
graph.simulateLoad(&job1, {{providesNominal, {"B1", "B2"}}});
817+
graph.simulateLoad(&job2, {{dependsNominal, {"B1"}}});
818+
819+
820+
const DependencyKey k = DependencyKey(NodeKind::nominal,
821+
DeclAspect::interface, "B1", "");
822+
std::vector<ModuleDepGraphNode *> changedNodes;
823+
graph.forEachMatchingNode(
824+
k,
825+
[&](ModuleDepGraphNode* n) {changedNodes.push_back(n);});
826+
{
827+
const auto jobs = graph.findJobsToRecompileWhenNodesChange(changedNodes);
828+
EXPECT_TRUE(contains(jobs, &job2));
829+
EXPECT_FALSE(contains(jobs, &job0));
830+
}
831+
}

0 commit comments

Comments
 (0)