Skip to content

Commit 2bc7f0a

Browse files
committed
Coverage percentage output value is rounded down with max two decimal precision.
1 parent 53fbc49 commit 2bc7f0a

File tree

10 files changed

+167
-38
lines changed

10 files changed

+167
-38
lines changed

src/coverlet.console/Program.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,15 +156,15 @@ static int Main(string[] args)
156156
var summary = new CoverageSummary();
157157
int numModules = result.Modules.Count;
158158

159-
var totalLinePercent = summary.CalculateLineCoverage(result.Modules).Percent * 100;
160-
var totalBranchPercent = summary.CalculateBranchCoverage(result.Modules).Percent * 100;
161-
var totalMethodPercent = summary.CalculateMethodCoverage(result.Modules).Percent * 100;
159+
var totalLinePercent = summary.CalculateLineCoverage(result.Modules).GetCoveragePercentage();
160+
var totalBranchPercent = summary.CalculateBranchCoverage(result.Modules).GetCoveragePercentage();
161+
var totalMethodPercent = summary.CalculateMethodCoverage(result.Modules).GetCoveragePercentage();
162162

163163
foreach (var _module in result.Modules)
164164
{
165-
var linePercent = summary.CalculateLineCoverage(_module.Value).Percent * 100;
166-
var branchPercent = summary.CalculateBranchCoverage(_module.Value).Percent * 100;
167-
var methodPercent = summary.CalculateMethodCoverage(_module.Value).Percent * 100;
165+
var linePercent = summary.CalculateLineCoverage(_module.Value).GetCoveragePercentage();
166+
var branchPercent = summary.CalculateBranchCoverage(_module.Value).GetCoveragePercentage();
167+
var methodPercent = summary.CalculateMethodCoverage(_module.Value).GetCoveragePercentage();
168168

169169
coverageTable.AddRow(Path.GetFileNameWithoutExtension(_module.Key), $"{linePercent}%", $"{branchPercent}%", $"{methodPercent}%");
170170
}

src/coverlet.core/CoverageDetails.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,18 @@ public class CoverageDetails
88
public int Total { get; internal set; }
99
public double Percent
1010
{
11-
get => Math.Round(Total == 0 ? 1 : Covered / Total, 3);
11+
get => Math.Round(Total == 0 ? 1 : Covered / Total, 4);
12+
}
13+
14+
public double GetCoveragePercentage()
15+
{
16+
double percentage = Percent * 100;
17+
return RoundDown(percentage);
18+
}
19+
20+
private double RoundDown(double percentage)
21+
{
22+
return Math.Floor(percentage * 100) / 100;
1223
}
1324
}
1425
}

src/coverlet.core/CoverageResult.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,9 @@ public ThresholdTypeFlags GetThresholdTypesBelowThreshold(CoverageSummary summar
170170
{
171171
foreach (var module in Modules)
172172
{
173-
var line = summary.CalculateLineCoverage(module.Value).Percent * 100;
174-
var branch = summary.CalculateBranchCoverage(module.Value).Percent * 100;
175-
var method = summary.CalculateMethodCoverage(module.Value).Percent * 100;
173+
var line = summary.CalculateLineCoverage(module.Value).GetCoveragePercentage();
174+
var branch = summary.CalculateBranchCoverage(module.Value).GetCoveragePercentage();
175+
var method = summary.CalculateMethodCoverage(module.Value).GetCoveragePercentage();
176176

177177
if ((thresholdTypes & ThresholdTypeFlags.Line) != ThresholdTypeFlags.None)
178178
{
@@ -203,9 +203,9 @@ public ThresholdTypeFlags GetThresholdTypesBelowThreshold(CoverageSummary summar
203203

204204
foreach (var module in Modules)
205205
{
206-
line += summary.CalculateLineCoverage(module.Value).Percent * 100;
207-
branch += summary.CalculateBranchCoverage(module.Value).Percent * 100;
208-
method += summary.CalculateMethodCoverage(module.Value).Percent * 100;
206+
line += summary.CalculateLineCoverage(module.Value).GetCoveragePercentage();
207+
branch += summary.CalculateBranchCoverage(module.Value).GetCoveragePercentage();
208+
method += summary.CalculateMethodCoverage(module.Value).GetCoveragePercentage();
209209
}
210210

211211
if ((thresholdTypes & ThresholdTypeFlags.Line) != ThresholdTypeFlags.None)
@@ -229,9 +229,9 @@ public ThresholdTypeFlags GetThresholdTypesBelowThreshold(CoverageSummary summar
229229
break;
230230
case ThresholdStatistic.Total:
231231
{
232-
var line = summary.CalculateLineCoverage(Modules).Percent * 100;
233-
var branch = summary.CalculateBranchCoverage(Modules).Percent * 100;
234-
var method = summary.CalculateMethodCoverage(Modules).Percent * 100;
232+
var line = summary.CalculateLineCoverage(Modules).GetCoveragePercentage();
233+
var branch = summary.CalculateBranchCoverage(Modules).GetCoveragePercentage();
234+
var method = summary.CalculateMethodCoverage(Modules).GetCoveragePercentage();
235235

236236
if ((thresholdTypes & ThresholdTypeFlags.Line) != ThresholdTypeFlags.None)
237237
{

src/coverlet.core/Reporters/CoberturaReporter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,15 @@ public string Report(CoverageResult result)
8282
{
8383
var branches = meth.Value.Branches.Where(b => b.Line == ln.Key).ToList();
8484
var branchInfoCoverage = summary.CalculateBranchCoverage(branches);
85-
line.Add(new XAttribute("condition-coverage", $"{branchInfoCoverage.Percent * 100}% ({branchInfoCoverage.Covered}/{branchInfoCoverage.Total})"));
85+
line.Add(new XAttribute("condition-coverage", $"{branchInfoCoverage.GetCoveragePercentage()}% ({branchInfoCoverage.Covered}/{branchInfoCoverage.Total})"));
8686
XElement conditions = new XElement("conditions");
8787
var byOffset = branches.GroupBy(b => b.Offset).ToDictionary(b => b.Key, b => b.ToList());
8888
foreach (var entry in byOffset)
8989
{
9090
XElement condition = new XElement("condition");
9191
condition.Add(new XAttribute("number", entry.Key));
9292
condition.Add(new XAttribute("type", entry.Value.Count() > 2 ? "switch" : "jump")); // Just guessing here
93-
condition.Add(new XAttribute("coverage", $"{summary.CalculateBranchCoverage(entry.Value).Percent * 100}%"));
93+
condition.Add(new XAttribute("coverage", $"{summary.CalculateBranchCoverage(entry.Value).GetCoveragePercentage()}%"));
9494
conditions.Add(condition);
9595
}
9696

src/coverlet.core/Reporters/OpenCoverReporter.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ public string Report(CoverageResult result)
7777

7878
method.Add(new XAttribute("cyclomaticComplexity", methCyclomaticComplexity.ToString()));
7979
method.Add(new XAttribute("nPathComplexity", "0"));
80-
method.Add(new XAttribute("sequenceCoverage", Math.Round(methLineCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture)));
81-
method.Add(new XAttribute("branchCoverage", Math.Round(methBranchCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture)));
80+
method.Add(new XAttribute("sequenceCoverage", methLineCoverage.GetCoveragePercentage().ToString("G", CultureInfo.InvariantCulture)));
81+
method.Add(new XAttribute("branchCoverage", methBranchCoverage.GetCoveragePercentage().ToString("G", CultureInfo.InvariantCulture)));
8282
method.Add(new XAttribute("isConstructor", meth.Key.Contains("ctor").ToString()));
8383
method.Add(new XAttribute("isGetter", meth.Key.Contains("get_").ToString()));
8484
method.Add(new XAttribute("isSetter", meth.Key.Contains("set_").ToString()));
@@ -158,8 +158,8 @@ public string Report(CoverageResult result)
158158
methodSummary.Add(new XAttribute("visitedSequencePoints", methLineCoverage.Covered.ToString()));
159159
methodSummary.Add(new XAttribute("numBranchPoints", methBranchCoverage.Total.ToString()));
160160
methodSummary.Add(new XAttribute("visitedBranchPoints", methBranchCoverage.Covered.ToString()));
161-
methodSummary.Add(new XAttribute("sequenceCoverage", Math.Round(methLineCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture)));
162-
methodSummary.Add(new XAttribute("branchCoverage", Math.Round(methBranchCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture)));
161+
methodSummary.Add(new XAttribute("sequenceCoverage", methLineCoverage.GetCoveragePercentage().ToString("G", CultureInfo.InvariantCulture)));
162+
methodSummary.Add(new XAttribute("branchCoverage", methBranchCoverage.GetCoveragePercentage().ToString("G", CultureInfo.InvariantCulture)));
163163
methodSummary.Add(new XAttribute("maxCyclomaticComplexity", methCyclomaticComplexity.ToString()));
164164
methodSummary.Add(new XAttribute("minCyclomaticComplexity", methCyclomaticComplexity.ToString()));
165165
methodSummary.Add(new XAttribute("visitedClasses", "0"));
@@ -192,8 +192,8 @@ public string Report(CoverageResult result)
192192
classSummary.Add(new XAttribute("visitedSequencePoints", classLineCoverage.Covered.ToString()));
193193
classSummary.Add(new XAttribute("numBranchPoints", classBranchCoverage.Total.ToString()));
194194
classSummary.Add(new XAttribute("visitedBranchPoints", classBranchCoverage.Covered.ToString()));
195-
classSummary.Add(new XAttribute("sequenceCoverage", Math.Round(classLineCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture)));
196-
classSummary.Add(new XAttribute("branchCoverage", Math.Round(classBranchCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture)));
195+
classSummary.Add(new XAttribute("sequenceCoverage", classLineCoverage.GetCoveragePercentage().ToString("G", CultureInfo.InvariantCulture)));
196+
classSummary.Add(new XAttribute("branchCoverage", classBranchCoverage.GetCoveragePercentage().ToString("G", CultureInfo.InvariantCulture)));
197197
classSummary.Add(new XAttribute("maxCyclomaticComplexity", classMaxCyclomaticComplexity.ToString()));
198198
classSummary.Add(new XAttribute("minCyclomaticComplexity", classMinCyclomaticComplexity.ToString()));
199199
classSummary.Add(new XAttribute("visitedClasses", classVisited ? "1" : "0"));
@@ -223,8 +223,8 @@ public string Report(CoverageResult result)
223223
coverageSummary.Add(new XAttribute("visitedSequencePoints", moduleLineCoverage.Covered.ToString()));
224224
coverageSummary.Add(new XAttribute("numBranchPoints", moduleBranchCoverage.Total.ToString()));
225225
coverageSummary.Add(new XAttribute("visitedBranchPoints", moduleBranchCoverage.Covered.ToString()));
226-
coverageSummary.Add(new XAttribute("sequenceCoverage", Math.Round(moduleLineCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture)));
227-
coverageSummary.Add(new XAttribute("branchCoverage", Math.Round(moduleBranchCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture)));
226+
coverageSummary.Add(new XAttribute("sequenceCoverage", moduleLineCoverage.GetCoveragePercentage().ToString("G", CultureInfo.InvariantCulture)));
227+
coverageSummary.Add(new XAttribute("branchCoverage", moduleBranchCoverage.GetCoveragePercentage().ToString("G", CultureInfo.InvariantCulture)));
228228
coverageSummary.Add(new XAttribute("maxCyclomaticComplexity", moduleMaxCyclomaticComplexity.ToString()));
229229
coverageSummary.Add(new XAttribute("minCyclomaticComplexity", moduleMinCyclomaticComplexity.ToString()));
230230
coverageSummary.Add(new XAttribute("visitedClasses", visitedClasses.ToString()));

src/coverlet.core/Reporters/TeamCityReporter.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public string Report(CoverageResult result)
3434
private void OutputLineCoverage(CoverageDetails coverageDetails, StringBuilder builder)
3535
{
3636
// The total number of lines
37-
OutputTeamCityServiceMessage("CodeCoverageL", coverageDetails.Percent * 100, builder);
37+
OutputTeamCityServiceMessage("CodeCoverageL", coverageDetails.GetCoveragePercentage(), builder);
3838

3939
// The number of covered lines
4040
OutputTeamCityServiceMessage("CodeCoverageAbsLCovered", coverageDetails.Covered, builder);
@@ -46,7 +46,7 @@ private void OutputLineCoverage(CoverageDetails coverageDetails, StringBuilder b
4646
private void OutputBranchCoverage(CoverageDetails coverageDetails, StringBuilder builder)
4747
{
4848
// The total number of branches
49-
OutputTeamCityServiceMessage("CodeCoverageR", coverageDetails.Percent * 100, builder);
49+
OutputTeamCityServiceMessage("CodeCoverageR", coverageDetails.GetCoveragePercentage(), builder);
5050

5151
// The number of covered branches
5252
OutputTeamCityServiceMessage("CodeCoverageAbsRCovered", coverageDetails.Covered, builder);
@@ -58,7 +58,7 @@ private void OutputBranchCoverage(CoverageDetails coverageDetails, StringBuilder
5858
private void OutputMethodCoverage(CoverageDetails coverageDetails, StringBuilder builder)
5959
{
6060
// The total number of methods
61-
OutputTeamCityServiceMessage("CodeCoverageM", coverageDetails.Percent * 100, builder);
61+
OutputTeamCityServiceMessage("CodeCoverageM", coverageDetails.GetCoveragePercentage(), builder);
6262

6363
// The number of covered methods
6464
OutputTeamCityServiceMessage("CodeCoverageAbsMCovered", coverageDetails.Covered, builder);

src/coverlet.msbuild.tasks/CoverageResultTask.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,15 +139,15 @@ public override bool Execute()
139139
var summary = new CoverageSummary();
140140
int numModules = result.Modules.Count;
141141

142-
var totalLinePercent = summary.CalculateLineCoverage(result.Modules).Percent * 100;
143-
var totalBranchPercent = summary.CalculateBranchCoverage(result.Modules).Percent * 100;
144-
var totalMethodPercent = summary.CalculateMethodCoverage(result.Modules).Percent * 100;
142+
var totalLinePercent = summary.CalculateLineCoverage(result.Modules).GetCoveragePercentage();
143+
var totalBranchPercent = summary.CalculateBranchCoverage(result.Modules).GetCoveragePercentage();
144+
var totalMethodPercent = summary.CalculateMethodCoverage(result.Modules).GetCoveragePercentage();
145145

146146
foreach (var module in result.Modules)
147147
{
148-
var linePercent = summary.CalculateLineCoverage(module.Value).Percent * 100;
149-
var branchPercent = summary.CalculateBranchCoverage(module.Value).Percent * 100;
150-
var methodPercent = summary.CalculateMethodCoverage(module.Value).Percent * 100;
148+
var linePercent = summary.CalculateLineCoverage(module.Value).GetCoveragePercentage();
149+
var branchPercent = summary.CalculateBranchCoverage(module.Value).GetCoveragePercentage();
150+
var methodPercent = summary.CalculateMethodCoverage(module.Value).GetCoveragePercentage();
151151

152152
coverageTable.AddRow(Path.GetFileNameWithoutExtension(module.Key), $"{linePercent}%", $"{branchPercent}%", $"{methodPercent}%");
153153
}

0 commit comments

Comments
 (0)