blob: 802b851b5f85843427e5b47d71a9fa9ff1374035 [file] [log] [blame]
Wenzel Jakob6d6fd092015-10-01 17:34:26 +02001import sys
2import os
3import re
4import subprocess
5
6remove_unicode_marker = re.compile(r'u(\'[^\']*\')')
7remove_long_marker = re.compile(r'([0-9])L')
Wenzel Jakob607654f2015-10-13 23:58:10 +02008remove_hex = re.compile(r'0x[0-9a-fA-F]+')
Wenzel Jakob6d6fd092015-10-01 17:34:26 +02009shorten_floats = re.compile(r'([1-9][0-9]*\.[0-9]{4})[0-9]*')
10
11
12def sanitize(lines):
13 lines = lines.split('\n')
14 for i in range(len(lines)):
15 line = lines[i]
16 if line.startswith(" |"):
17 line = ""
18 line = remove_unicode_marker.sub(r'\1', line)
19 line = remove_long_marker.sub(r'\1', line)
Wenzel Jakob3b806d42015-10-11 16:29:35 +020020 line = remove_hex.sub(r'0', line)
Wenzel Jakob6d6fd092015-10-01 17:34:26 +020021 line = shorten_floats.sub(r'\1', line)
22 line = line.replace('__builtin__', 'builtins')
23 line = line.replace('example.', '')
Wenzel Jakob27e8e102016-01-17 22:36:37 +010024 line = line.replace('unicode', 'str')
Wenzel Jakob678d7872016-01-17 22:36:41 +010025 line = line.replace('Example4.EMode', 'EMode')
26 line = line.replace('example.EMode', 'EMode')
Wenzel Jakob6d6fd092015-10-01 17:34:26 +020027 line = line.replace('method of builtins.PyCapsule instance', '')
28 line = line.strip()
Wenzel Jakob607654f2015-10-13 23:58:10 +020029 if sys.platform == 'win32':
30 lower = line.lower()
Wenzel Jakob76269b72015-12-13 11:33:41 +010031 # The precise pattern of allocations and deallocations is dependent on the compiler
32 # and optimization level, so we unfortunately can't reliably check it in this kind of test case
Wenzel Jakobfab881c2015-10-18 17:04:24 +020033 if 'constructor' in lower or 'destructor' in lower \
Wenzel Jakob76269b72015-12-13 11:33:41 +010034 or 'ref' in lower or 'freeing' in lower:
Wenzel Jakob607654f2015-10-13 23:58:10 +020035 line = ""
Wenzel Jakob6d6fd092015-10-01 17:34:26 +020036 lines[i] = line
37
38 lines = '\n'.join(sorted([l for l in lines if l != ""]))
39
40 print('==================')
41 print(lines)
42 return lines
Wenzel Jakob38bd7112015-07-05 20:05:44 +020043
44path = os.path.dirname(__file__)
45if path != '':
46 os.chdir(path)
47
48name = sys.argv[1]
Wenzel Jakobfab881c2015-10-18 17:04:24 +020049output_bytes = subprocess.check_output([sys.executable, name + ".py"],
50 stderr=subprocess.STDOUT)
51
Wenzel Jakob6d6fd092015-10-01 17:34:26 +020052output = sanitize(output_bytes.decode('utf-8'))
53reference = sanitize(open(name + '.ref', 'r').read())
Wenzel Jakob38bd7112015-07-05 20:05:44 +020054
Wenzel Jakobfab881c2015-10-18 17:04:24 +020055if 'NumPy missing' in output:
56 print('Test "%s" could not be run.' % name)
57 exit(0)
58elif output == reference:
Wenzel Jakob38bd7112015-07-05 20:05:44 +020059 print('Test "%s" succeeded.' % name)
60 exit(0)
61else:
62 print('Test "%s" FAILED!' % name)
63 exit(-1)