| 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) |