in DuplicateCodeDetector/CloneGroups.cs [26:59]
public CloneGroups(IEnumerable<(string File1, string File2)> clonePairs)
{
foreach (var (f1, f2) in clonePairs)
{
AddElementNonTransitive(f1, f2);
AddElementNonTransitive(f2, f1);
}
Console.WriteLine($"Found {FileToCloneSet.Count} files that are cloned.");
var numCloneClusters = MakeCloneSetTransitive();
Console.WriteLine($"Number of unique clone clusters {numCloneClusters}");
var duplicationFactors = CloneSets.Select(c => c.Count).ToList();
if (duplicationFactors.Count > 0)
{
Console.WriteLine($"Avg Duplication Factor: {duplicationFactors.Average()}");
duplicationFactors.Sort();
double median;
int midpoint = duplicationFactors.Count > 2 ? duplicationFactors.Count / 2 : 0;
if (duplicationFactors.Count % 2 == 0)
{
median = (duplicationFactors[midpoint] + duplicationFactors[midpoint + 1]) / 2;
}
else
{
median = duplicationFactors[midpoint];
}
Console.WriteLine($"Median Duplication Factor: {median}");
}
else
{
Console.WriteLine("No duplicates found.");
}
}