-
Notifications
You must be signed in to change notification settings - Fork 75
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Deduplicate mutations by introducing a separate, higher-level entity
Closes #782
- Loading branch information
1 parent
50841ed
commit a0392b8
Showing
15 changed files
with
205 additions
and
70 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
#pragma once | ||
|
||
#include <memory> | ||
#include <string> | ||
#include <vector> | ||
|
||
namespace mull { | ||
|
||
class MutationPoint; | ||
struct SourceLocation; | ||
|
||
class Mutant { | ||
public: | ||
Mutant(std::string identifier, std::vector<MutationPoint *> points); | ||
|
||
const std::string &getIdentifier() const; | ||
const std::vector<MutationPoint *> &getMutationPoints() const; | ||
const SourceLocation &getSourceLocation() const; | ||
const std::string &getDiagnostics() const; | ||
const std::string &getReplacement() const; | ||
const std::string &getMutatorIdentifier() const; | ||
|
||
private: | ||
std::string identifier; | ||
std::string mutatorIdentifier; | ||
std::vector<MutationPoint *> points; | ||
}; | ||
|
||
struct MutantComparator { | ||
bool operator()(std::unique_ptr<Mutant> &lhs, std::unique_ptr<Mutant> &rhs); | ||
bool operator()(Mutant &lhs, Mutant &rhs); | ||
}; | ||
|
||
} // namespace mull |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,24 +1,27 @@ | ||
#pragma once | ||
|
||
#include "ExecutionResult.h" | ||
#include "MutationPoint.h" | ||
#include "mull/ExecutionResult.h" | ||
#include <utility> | ||
|
||
namespace mull { | ||
|
||
class MutationResult { | ||
ExecutionResult Result; | ||
MutationPoint *MutPoint; | ||
class Mutant; | ||
|
||
class MutationResult { | ||
public: | ||
MutationResult(ExecutionResult R, MutationPoint *MP) : Result(std::move(R)), MutPoint(MP) {} | ||
MutationResult(ExecutionResult result, Mutant *mutant) | ||
: result(std::move(result)), mutant(mutant) {} | ||
|
||
ExecutionResult &getExecutionResult() { | ||
return Result; | ||
return result; | ||
} | ||
MutationPoint *getMutationPoint() { | ||
return MutPoint; | ||
Mutant *getMutant() { | ||
return mutant; | ||
} | ||
|
||
private: | ||
ExecutionResult result; | ||
Mutant *mutant; | ||
}; | ||
|
||
} // namespace mull |
9 changes: 4 additions & 5 deletions
9
include/mull/Parallelization/Tasks/DryRunMutantExecutionTask.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,17 @@ | ||
#pragma once | ||
|
||
#include <mull/MutationResult.h> | ||
#include "mull/Mutant.h" | ||
#include "mull/MutationResult.h" | ||
|
||
namespace mull { | ||
class progress_counter; | ||
class MutationPoint; | ||
|
||
class DryRunMutantExecutionTask { | ||
public: | ||
using In = const std::vector<MutationPoint *>; | ||
using In = const std::vector<std::unique_ptr<Mutant>>; | ||
using Out = std::vector<std::unique_ptr<MutationResult>>; | ||
using iterator = In::const_iterator; | ||
|
||
void operator()(iterator begin, iterator end, Out &storage, | ||
progress_counter &counter); | ||
void operator()(iterator begin, iterator end, Out &storage, progress_counter &counter); | ||
}; | ||
} // namespace mull |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
#include "mull/Mutant.h" | ||
#include "mull/MutationPoint.h" | ||
#include "mull/SourceLocation.h" | ||
|
||
using namespace mull; | ||
|
||
Mutant::Mutant(std::string identifier, std::vector<MutationPoint *> points) | ||
: identifier(std::move(identifier)), mutatorIdentifier(points.front()->getMutatorIdentifier()), | ||
points(std::move(points)) {} | ||
|
||
const std::string &Mutant::getIdentifier() const { | ||
return identifier; | ||
} | ||
|
||
const std::vector<MutationPoint *> &Mutant::getMutationPoints() const { | ||
return points; | ||
} | ||
|
||
const SourceLocation &Mutant::getSourceLocation() const { | ||
return points.front()->getSourceLocation(); | ||
} | ||
|
||
const std::string &Mutant::getDiagnostics() const { | ||
return points.front()->getDiagnostics(); | ||
} | ||
|
||
const std::string &Mutant::getMutatorIdentifier() const { | ||
return mutatorIdentifier; | ||
} | ||
|
||
const std::string &Mutant::getReplacement() const { | ||
return points.front()->getReplacement(); | ||
} | ||
|
||
bool MutantComparator::operator()(std::unique_ptr<Mutant> &lhs, std::unique_ptr<Mutant> &rhs) { | ||
return operator()(*lhs, *rhs); | ||
} | ||
|
||
bool MutantComparator::operator()(Mutant &lhs, Mutant &rhs) { | ||
const SourceLocation &l = lhs.getSourceLocation(); | ||
const SourceLocation &r = rhs.getSourceLocation(); | ||
return std::tie(l.filePath, l.line, l.column, lhs.getMutatorIdentifier()) < | ||
std::tie(r.filePath, r.line, r.column, rhs.getMutatorIdentifier()); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,14 @@ | ||
#include "mull/Parallelization/Tasks/DryRunMutantExecutionTask.h" | ||
|
||
#include "mull/Parallelization/Progress.h" | ||
|
||
using namespace mull; | ||
|
||
void DryRunMutantExecutionTask::operator()(iterator begin, iterator end, Out &storage, | ||
progress_counter &counter) { | ||
for (auto it = begin; it != end; it++, counter.increment()) { | ||
auto mutationPoint = *it; | ||
auto &mutant = *it; | ||
ExecutionResult result; | ||
result.status = DryRun; | ||
storage.push_back(std::make_unique<MutationResult>(result, mutationPoint)); | ||
storage.push_back(std::make_unique<MutationResult>(result, mutant.get())); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.