Skip to content

Commit

Permalink
Don't use rounding for coverage calculation (open-policy-agent#6308)
Browse files Browse the repository at this point in the history
Perhaps it looks prettier, but this is only reported in
JSON output, so I don't think we should decide on what
precision to use there.

On coverage < threshold error, we still print using 2
decimals, which is Pretty (tm).

Fixes open-policy-agent#6307

Signed-off-by: Anders Eknert <[email protected]>
  • Loading branch information
anderseknert authored Oct 12, 2023
1 parent 9dac709 commit 6c3f363
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 12 deletions.
2 changes: 1 addition & 1 deletion cmd/test_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -973,7 +973,7 @@ Lines not covered:
threshold: 100,
expectedExitCode: 2,
verbose: true,
expectedErrOutput: `Code coverage threshold not met: got 33.35 instead of 100.00
expectedErrOutput: `Code coverage threshold not met: got 33.33 instead of 100.00
Lines not covered:
%ROOT%/policy1.rego:2-3
%ROOT%/policy1.rego:6
Expand Down
10 changes: 2 additions & 8 deletions cover/cover.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ package cover
import (
"bytes"
"fmt"
"math"
"sort"

"github.com/open-policy-agent/opa/ast"
Expand Down Expand Up @@ -99,7 +98,7 @@ func (c *Cover) Report(modules map[string]*ast.Module) (report Report) {
}
report.CoveredLines = coveredLoc
report.NotCoveredLines = notCoveredLoc
report.Coverage = round(overallCoverage, 2)
report.Coverage = overallCoverage

return
}
Expand Down Expand Up @@ -224,7 +223,7 @@ func (fr *FileReport) computeCoveragePercentage() float64 {
return 0.0
}

return round(100.0*float64(coveredLoc)/float64(totalLoc), 2)
return 100.0 * float64(coveredLoc) / float64(totalLoc)
}

// Report represents a coverage report for a set of files.
Expand Down Expand Up @@ -303,11 +302,6 @@ func hasFileLocation(loc *ast.Location) bool {
return loc != nil && loc.File != ""
}

// round returns the number with the specified precision.
func round(number float64, precision int) float64 {
return math.Round(number*10*float64(precision)) / (10.0 * float64(precision))
}

// Check the expression and return true if it should be included in the coverage report
func includeExprInCoverage(x *ast.Expr) bool {
includeExprType := true
Expand Down
6 changes: 3 additions & 3 deletions cover/cover_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,9 @@ p {
fr.locNotCovered())
}

expectedCoveragePercentage := round(100.0*float64(len(expectedCovered))/float64(len(expectedCovered)+len(expectedNotCovered)), 2)
expectedCoveragePercentage := 100.0 * float64(len(expectedCovered)) / float64(len(expectedCovered)+len(expectedNotCovered))
if expectedCoveragePercentage != fr.Coverage {
t.Errorf("Expected coverage %f != %f", expectedCoveragePercentage, fr.Coverage)
t.Errorf("Expected coverage %v != %v", expectedCoveragePercentage, fr.Coverage)
}

// there's just one file, hence the overall coverage is equal to the
Expand Down Expand Up @@ -212,7 +212,7 @@ allow { true }
fr.locNotCovered())
}

expectedCoveragePercentage := round(100.0*float64(len(expectedCovered))/float64(len(expectedCovered)+len(expectedNotCovered)), 2)
expectedCoveragePercentage := 100.0 * float64(len(expectedCovered)) / float64(len(expectedCovered)+len(expectedNotCovered))
if expectedCoveragePercentage != fr.Coverage {
t.Errorf("Expected coverage %f != %f", expectedCoveragePercentage, fr.Coverage)
}
Expand Down

0 comments on commit 6c3f363

Please sign in to comment.