Skip to content

Commit 7cfe07e

Browse files
authored
Merge pull request #397 from sasivishnu/Rounding-CoveragePercentage
Coverage percentage output value rounded down with max 2 decimal precision
2 parents d1a30cc + 2201898 commit 7cfe07e

File tree

10 files changed

+127
-60
lines changed

10 files changed

+127
-60
lines changed

src/coverlet.console/Program.cs

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

165-
var totalLinePercent = summary.CalculateLineCoverage(result.Modules).Percent * 100;
166-
var totalBranchPercent = summary.CalculateBranchCoverage(result.Modules).Percent * 100;
167-
var totalMethodPercent = summary.CalculateMethodCoverage(result.Modules).Percent * 100;
165+
var totalLinePercent = summary.CalculateLineCoverage(result.Modules).Percent;
166+
var totalBranchPercent = summary.CalculateBranchCoverage(result.Modules).Percent;
167+
var totalMethodPercent = summary.CalculateMethodCoverage(result.Modules).Percent;
168168

169169
foreach (var _module in result.Modules)
170170
{
171-
var linePercent = summary.CalculateLineCoverage(_module.Value).Percent * 100;
172-
var branchPercent = summary.CalculateBranchCoverage(_module.Value).Percent * 100;
173-
var methodPercent = summary.CalculateMethodCoverage(_module.Value).Percent * 100;
171+
var linePercent = summary.CalculateLineCoverage(_module.Value).Percent;
172+
var branchPercent = summary.CalculateBranchCoverage(_module.Value).Percent;
173+
var methodPercent = summary.CalculateMethodCoverage(_module.Value).Percent;
174174

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

src/coverlet.core/CoverageDetails.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ public class CoverageDetails
66
{
77
public double Covered { get; internal set; }
88
public int Total { get; internal set; }
9-
public double Percent
10-
{
11-
get => Math.Round(Total == 0 ? 1 : Covered / Total, 3);
12-
}
9+
public double Percent => Total == 0 ? 100D : Math.Floor((Covered / Total) * 10000) / 100;
1310
}
1411
}

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).Percent;
174+
var branch = summary.CalculateBranchCoverage(module.Value).Percent;
175+
var method = summary.CalculateMethodCoverage(module.Value).Percent;
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).Percent;
207+
branch += summary.CalculateBranchCoverage(module.Value).Percent;
208+
method += summary.CalculateMethodCoverage(module.Value).Percent;
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).Percent;
233+
var branch = summary.CalculateBranchCoverage(Modules).Percent;
234+
var method = summary.CalculateMethodCoverage(Modules).Percent;
235235

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

src/coverlet.core/Reporters/CoberturaReporter.cs

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

2626
XDocument xml = new XDocument();
2727
XElement coverage = new XElement("coverage");
28-
coverage.Add(new XAttribute("line-rate", summary.CalculateLineCoverage(result.Modules).Percent.ToString()));
29-
coverage.Add(new XAttribute("branch-rate", summary.CalculateBranchCoverage(result.Modules).Percent.ToString()));
28+
coverage.Add(new XAttribute("line-rate", (summary.CalculateLineCoverage(result.Modules).Percent / 100).ToString()));
29+
coverage.Add(new XAttribute("branch-rate", (summary.CalculateBranchCoverage(result.Modules).Percent / 100).ToString()));
3030
coverage.Add(new XAttribute("version", "1.9"));
3131
coverage.Add(new XAttribute("timestamp", ((int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds).ToString()));
3232

@@ -38,8 +38,8 @@ public string Report(CoverageResult result)
3838
{
3939
XElement package = new XElement("package");
4040
package.Add(new XAttribute("name", Path.GetFileNameWithoutExtension(module.Key)));
41-
package.Add(new XAttribute("line-rate", summary.CalculateLineCoverage(module.Value).Percent.ToString()));
42-
package.Add(new XAttribute("branch-rate", summary.CalculateBranchCoverage(module.Value).Percent.ToString()));
41+
package.Add(new XAttribute("line-rate", (summary.CalculateLineCoverage(module.Value).Percent / 100).ToString()));
42+
package.Add(new XAttribute("branch-rate", (summary.CalculateBranchCoverage(module.Value).Percent / 100).ToString()));
4343
package.Add(new XAttribute("complexity", summary.CalculateCyclomaticComplexity(module.Value).ToString()));
4444

4545
XElement classes = new XElement("classes");
@@ -50,8 +50,8 @@ public string Report(CoverageResult result)
5050
XElement @class = new XElement("class");
5151
@class.Add(new XAttribute("name", cls.Key));
5252
@class.Add(new XAttribute("filename", document.Key));
53-
@class.Add(new XAttribute("line-rate", summary.CalculateLineCoverage(cls.Value).Percent.ToString()));
54-
@class.Add(new XAttribute("branch-rate", summary.CalculateBranchCoverage(cls.Value).Percent.ToString()));
53+
@class.Add(new XAttribute("line-rate", (summary.CalculateLineCoverage(cls.Value).Percent / 100).ToString()));
54+
@class.Add(new XAttribute("branch-rate", (summary.CalculateBranchCoverage(cls.Value).Percent / 100).ToString()));
5555
@class.Add(new XAttribute("complexity", summary.CalculateCyclomaticComplexity(cls.Value).ToString()));
5656

5757
XElement classLines = new XElement("lines");
@@ -66,8 +66,8 @@ public string Report(CoverageResult result)
6666
XElement method = new XElement("method");
6767
method.Add(new XAttribute("name", meth.Key.Split(':')[2].Split('(')[0]));
6868
method.Add(new XAttribute("signature", "(" + meth.Key.Split(':')[2].Split('(')[1]));
69-
method.Add(new XAttribute("line-rate", summary.CalculateLineCoverage(meth.Value.Lines).Percent.ToString()));
70-
method.Add(new XAttribute("branch-rate", summary.CalculateBranchCoverage(meth.Value.Branches).Percent.ToString()));
69+
method.Add(new XAttribute("line-rate", (summary.CalculateLineCoverage(meth.Value.Lines).Percent / 100).ToString()));
70+
method.Add(new XAttribute("branch-rate", (summary.CalculateBranchCoverage(meth.Value.Branches).Percent / 100).ToString()));
7171

7272
XElement lines = new XElement("lines");
7373
foreach (var ln in meth.Value.Lines)
@@ -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.Percent}% ({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).Percent}%"));
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.Percent.ToString("G", CultureInfo.InvariantCulture)));
81+
method.Add(new XAttribute("branchCoverage", methBranchCoverage.Percent.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.Percent.ToString("G", CultureInfo.InvariantCulture)));
162+
methodSummary.Add(new XAttribute("branchCoverage", methBranchCoverage.Percent.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.Percent.ToString("G", CultureInfo.InvariantCulture)));
196+
classSummary.Add(new XAttribute("branchCoverage", classBranchCoverage.Percent.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.Percent.ToString("G", CultureInfo.InvariantCulture)));
227+
coverageSummary.Add(new XAttribute("branchCoverage", moduleBranchCoverage.Percent.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.Percent, 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.Percent, 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.Percent, 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).Percent;
143+
var totalBranchPercent = summary.CalculateBranchCoverage(result.Modules).Percent;
144+
var totalMethodPercent = summary.CalculateMethodCoverage(result.Modules).Percent;
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).Percent;
149+
var branchPercent = summary.CalculateBranchCoverage(module.Value).Percent;
150+
var methodPercent = summary.CalculateMethodCoverage(module.Value).Percent;
151151

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

0 commit comments

Comments
 (0)