from __future__ import print_function import sys import getopt fail_under = None max_difference = 0 read_location = None save_location = None raw = False argv = sys.argv[1:] opts, args = getopt.getopt( argv, "s:r:", ["fail-under=", "max-difference=", "save=", "read=", "raw"] ) 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 elif opt == "--raw": raw = True 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)) if raw: print("{0:6.2f}".format(coverage * 100)) else: 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)