| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #!/usr/bin/env python2
- import re
- import sys
- import subprocess
- import os
- def generate(test):
- with open("scripts/template.fmt") as file:
- template = file.read()
- lines = []
- for line in re.split('(?<=(?:.;| [{}]))\n', test.read()):
- match = re.match('(?: *\n)*( *)(.*)=>(.*);', line, re.DOTALL | re.MULTILINE)
- if match:
- tab, test, expect = match.groups()
- lines.append(tab+'test = {test};'.format(test=test.strip()))
- lines.append(tab+'test_assert("{name}", test, {expect});'.format(
- name = re.match('\w*', test.strip()).group(),
- expect = expect.strip()))
- else:
- lines.append(line)
- # Create test file
- with open('test.c', 'w') as file:
- file.write(template.format(tests='\n'.join(lines)))
- # Remove build artifacts to force rebuild
- try:
- os.remove('test.o')
- os.remove('lfs')
- except OSError:
- pass
- def compile():
- subprocess.check_call([
- os.environ.get('MAKE', 'make'),
- '--no-print-directory', '-s'])
- def execute():
- if 'EXEC' in os.environ:
- subprocess.check_call([os.environ['EXEC'], "./lfs"])
- else:
- subprocess.check_call(["./lfs"])
- def main(test=None):
- if test and not test.startswith('-'):
- with open(test) as file:
- generate(file)
- else:
- generate(sys.stdin)
- compile()
- if test == '-s':
- sys.exit(1)
- execute()
- if __name__ == "__main__":
- main(*sys.argv[1:])
|