You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							72 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							72 lines
						
					
					
						
							2.3 KiB
						
					
					
				
								import sys
							 | 
						|
								import os
							 | 
						|
								import re
							 | 
						|
								import subprocess
							 | 
						|
								
							 | 
						|
								remove_unicode_marker = re.compile(r'u(\'[^\']*\')')
							 | 
						|
								remove_long_marker    = re.compile(r'([0-9])L')
							 | 
						|
								remove_hex            = re.compile(r'0x[0-9a-fA-F]+')
							 | 
						|
								shorten_floats        = re.compile(r'([1-9][0-9]*\.[0-9]{4})[0-9]*')
							 | 
						|
								
							 | 
						|
								relaxed = False
							 | 
						|
								
							 | 
						|
								def sanitize(lines):
							 | 
						|
								    lines = lines.split('\n')
							 | 
						|
								    for i in range(len(lines)):
							 | 
						|
								        line = lines[i]
							 | 
						|
								        if line.startswith(" |"):
							 | 
						|
								            line = ""
							 | 
						|
								        line = remove_unicode_marker.sub(r'\1', line)
							 | 
						|
								        line = remove_long_marker.sub(r'\1', line)
							 | 
						|
								        line = remove_hex.sub(r'0', line)
							 | 
						|
								        line = shorten_floats.sub(r'\1', line)
							 | 
						|
								        line = line.replace('__builtin__', 'builtins')
							 | 
						|
								        line = line.replace('example.', '')
							 | 
						|
								        line = line.replace('unicode', 'str')
							 | 
						|
								        line = line.replace('Example4.EMode', 'EMode')
							 | 
						|
								        line = line.replace('example.EMode', 'EMode')
							 | 
						|
								        line = line.replace('method of builtins.PyCapsule instance', '')
							 | 
						|
								        line = line.strip()
							 | 
						|
								        if relaxed:
							 | 
						|
								            lower = line.lower()
							 | 
						|
								            # The precise pattern of allocations and deallocations is dependent on the compiler
							 | 
						|
								            # and optimization level, so we unfortunately can't reliably check it in this kind of test case
							 | 
						|
								            if 'constructor' in lower or 'destructor' in lower \
							 | 
						|
								               or 'ref' in lower or 'freeing' in lower:
							 | 
						|
								                line = ""
							 | 
						|
								        lines[i] = line
							 | 
						|
								
							 | 
						|
								    lines = '\n'.join(sorted([l for l in lines if l != ""]))
							 | 
						|
								
							 | 
						|
								    print('==================')
							 | 
						|
								    print(lines)
							 | 
						|
								    return lines
							 | 
						|
								
							 | 
						|
								path = os.path.dirname(__file__)
							 | 
						|
								if path != '':
							 | 
						|
								    os.chdir(path)
							 | 
						|
								
							 | 
						|
								if len(sys.argv) < 2:
							 | 
						|
								    print("Syntax: %s [--relaxed] <test name>" % sys.argv[0])
							 | 
						|
								    exit(0)
							 | 
						|
								
							 | 
						|
								if len(sys.argv) == 3 and sys.argv[1] == '--relaxed':
							 | 
						|
								    del sys.argv[1]
							 | 
						|
								    relaxed = True
							 | 
						|
								
							 | 
						|
								name = sys.argv[1]
							 | 
						|
								output_bytes = subprocess.check_output([sys.executable, name + ".py"],
							 | 
						|
								                                       stderr=subprocess.STDOUT)
							 | 
						|
								
							 | 
						|
								output    = sanitize(output_bytes.decode('utf-8'))
							 | 
						|
								reference = sanitize(open(name + '.ref', 'r').read())
							 | 
						|
								
							 | 
						|
								if 'NumPy missing' in output:
							 | 
						|
								    print('Test "%s" could not be run.' % name)
							 | 
						|
								    exit(0)
							 | 
						|
								elif output == reference:
							 | 
						|
								    print('Test "%s" succeeded.' % name)
							 | 
						|
								    exit(0)
							 | 
						|
								else:
							 | 
						|
								    print('Test "%s" FAILED!' % name)
							 | 
						|
								    exit(-1)
							 |