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)
 |