Code coverage library for Nim. Inspired by Andreas Rumpf talk at OSCON.
import coverage
import tables
proc myProcToCover(x: int) {.cov.} = # Add cov pragma to proc definition to enable code coverage.
if x == 0:
echo "x is 0"
else:
echo "x is ", x
# Run your program or unittest
myProcToCover(1)
# At the end of the program, display coverage results:
echo "BY FILE: "
for fname, perc in coveragePercentageByFile():
echo fname, " ", perc
# Outputs: BY FILE: {test.nim: 0.5}
echo "TOTAL: ", totalCoverage()
# Outputs: TOTAL: 0.5
# Finer grained information may be accessed with coverageInfoByFile proc.
import coverage, tables, unittest
# Import your code and run the tests as usual
# suite "test": ...
echo "Coverage by file: "
for fname, num in coveragePercentageByFile().pairs():
echo fname, " ", num
echo "Total coverage: ", totalCoverage()
Add "import coverage" and the top of your sources and add "{.cov.}" to every proc.
export NIM_COVERAGE_DIR=coverage_results
mkdir -p "$NIM_COVERAGE_DIR"
nim c -r your_tests.nim
nimcoverage genreport
- Code coverage is disabled if
release
is defined. DefineenableCodeCoverage
option to keep it enabled in release mode.
If you're using Travis CI and Coveralls, you can upload coverage results right at the end of your program:
sendCoverageResultsToCoveralls()