63 lines
1.6 KiB
Python
63 lines
1.6 KiB
Python
from __future__ import print_function
|
|
import sys
|
|
import getopt
|
|
|
|
fail_under = None
|
|
max_difference = 0
|
|
read_location = None
|
|
save_location = None
|
|
|
|
argv = sys.argv[1:]
|
|
|
|
opts, args = getopt.getopt(
|
|
argv, "s:r:", ["fail-under=", "max-difference=", "save=", "read="]
|
|
)
|
|
if args:
|
|
raise ValueError("Unexpected parameters: {0}".format(args))
|
|
for opt, arg in opts:
|
|
if opt == "-s" or opt == "--save":
|
|
save_location = arg
|
|
elif opt == "-r" or opt == "--read":
|
|
read_location = arg
|
|
elif opt == "--fail-under":
|
|
fail_under = float(arg) / 100.0
|
|
elif opt == "--max-difference":
|
|
max_difference = float(arg) / 100.0
|
|
else:
|
|
raise ValueError("Unknown option: {0}".format(opt))
|
|
|
|
total_hits = 0
|
|
total_count = 0
|
|
|
|
for line in sys.stdin.readlines():
|
|
if not line.startswith("ecdsa"):
|
|
continue
|
|
|
|
fields = line.split()
|
|
hit, count = fields[1].split("/")
|
|
total_hits += int(hit)
|
|
total_count += int(count)
|
|
|
|
coverage = total_hits * 1.0 / total_count
|
|
|
|
if read_location:
|
|
with open(read_location, "r") as f:
|
|
old_coverage = float(f.read())
|
|
print("Old coverage: {0:6.2f}%".format(old_coverage * 100))
|
|
|
|
if save_location:
|
|
with open(save_location, "w") as f:
|
|
f.write("{0:1.40f}".format(coverage))
|
|
|
|
print("Coverage: {0:6.2f}%".format(coverage * 100))
|
|
|
|
if read_location:
|
|
print("Difference: {0:6.2f}%".format((old_coverage - coverage) * 100))
|
|
|
|
if fail_under and coverage < fail_under:
|
|
print("ERROR: Insufficient coverage.", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
if read_location and coverage - old_coverage < max_difference:
|
|
print("ERROR: Too big decrease in coverage", file=sys.stderr)
|
|
sys.exit(1)
|