diff options
Diffstat (limited to 'final/runtime/test/affinity/format/check.py')
-rw-r--r-- | final/runtime/test/affinity/format/check.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/final/runtime/test/affinity/format/check.py b/final/runtime/test/affinity/format/check.py new file mode 100644 index 0000000..0adddbd --- /dev/null +++ b/final/runtime/test/affinity/format/check.py @@ -0,0 +1,73 @@ +import os +import sys +import argparse +import re + +class Checks(object): + class CheckError(Exception): + pass + + def __init__(self, filename, prefix): + self.checks = [] + self.lines = [] + self.check_no_output = False + self.filename = filename + self.prefix = prefix + def readStdin(self): + self.lines = [l.rstrip('\r\n') for l in sys.stdin.readlines()] + def readChecks(self): + with open(self.filename) as f: + for line in f: + match = re.search('{}: NO_OUTPUT'.format(self.prefix), line) + if match is not None: + self.check_no_output = True + return + match = re.search('{}: num_threads=([0-9]+) (.*)$'.format(self.prefix), line) + if match is not None: + num_threads = int(match.group(1)) + for i in range(num_threads): + self.checks.append(match.group(2)) + continue + def check(self): + # If no checks at all, then nothing to do + if len(self.checks) == 0 and not self.check_no_output: + print('Nothing to check for') + return + # Check if we are expecting no output + if self.check_no_output: + if len(self.lines) == 0: + return + else: + raise Checks.CheckError('{}: Output was found when expecting none.'.format(self.prefix)) + # Run through each check line and see if it exists in the output + # If it does, then delete the line from output and look for the + # next check line. + # If you don't find the line then raise Checks.CheckError + # If there are extra lines of output then raise Checks.CheckError + for c in self.checks: + found = False + index = -1 + for idx, line in enumerate(self.lines): + if re.search(c, line) is not None: + found = True + index = idx + break + if not found: + raise Checks.CheckError('{}: Did not find: {}'.format(self.prefix, c)) + else: + del self.lines[index] + if len(self.lines) != 0: + raise Checks.CheckError('{}: Extra output: {}'.format(self.prefix, self.lines)) + +# Setup argument parsing +parser = argparse.ArgumentParser(description='''This script checks output of + a program against "CHECK" lines in filename''') +parser.add_argument('filename', default=None, help='filename to check against') +parser.add_argument('-c', '--check-prefix', dest='prefix', + default='CHECK', help='check prefix token default: %(default)s') +command_args = parser.parse_args() +# Do the checking +checks = Checks(command_args.filename, command_args.prefix) +checks.readStdin() +checks.readChecks() +checks.check() |