blob: 8977e96724b1123795bcdf420a451d883960bbbb [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 Jakob6d6fd092015-10-01 17:34:26 +020025 line = line.replace('method of builtins.PyCapsule instance', '')
26 line = line.strip()
Wenzel Jakob607654f2015-10-13 23:58:10 +020027 if sys.platform == 'win32':
28 lower = line.lower()
Wenzel Jakob76269b72015-12-13 11:33:41 +010029 # The precise pattern of allocations and deallocations is dependent on the compiler
30 # and optimization level, so we unfortunately can't reliably check it in this kind of test case
Wenzel Jakobfab881c2015-10-18 17:04:24 +020031 if 'constructor' in lower or 'destructor' in lower \
Wenzel Jakob76269b72015-12-13 11:33:41 +010032 or 'ref' in lower or 'freeing' in lower:
Wenzel Jakob607654f2015-10-13 23:58:10 +020033 line = ""
Wenzel Jakob6d6fd092015-10-01 17:34:26 +020034 lines[i] = line
35
36 lines = '\n'.join(sorted([l for l in lines if l != ""]))
37
38 print('==================')
39 print(lines)
40 return lines
Wenzel Jakob38bd7112015-07-05 20:05:44 +020041
42path = os.path.dirname(__file__)
43if path != '':
44 os.chdir(path)
45
46name = sys.argv[1]
Wenzel Jakobfab881c2015-10-18 17:04:24 +020047output_bytes = subprocess.check_output([sys.executable, name + ".py"],
48 stderr=subprocess.STDOUT)
49
Wenzel Jakob6d6fd092015-10-01 17:34:26 +020050output = sanitize(output_bytes.decode('utf-8'))
51reference = sanitize(open(name + '.ref', 'r').read())
Wenzel Jakob38bd7112015-07-05 20:05:44 +020052
Wenzel Jakobfab881c2015-10-18 17:04:24 +020053if 'NumPy missing' in output:
54 print('Test "%s" could not be run.' % name)
55 exit(0)
56elif output == reference:
Wenzel Jakob38bd7112015-07-05 20:05:44 +020057 print('Test "%s" succeeded.' % name)
58 exit(0)
59else:
60 print('Test "%s" FAILED!' % name)
61 exit(-1)