76 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			76 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import platform
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import pytest
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from numpy.testing import IS_64BIT
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from . import util
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@pytest.mark.skipif(
							 | 
						||
| 
								 | 
							
								    platform.system() == "Darwin",
							 | 
						||
| 
								 | 
							
								    reason="Prone to error when run with numpy/f2py/tests on mac os, "
							 | 
						||
| 
								 | 
							
								    "but not when run in isolation",
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								@pytest.mark.skipif(
							 | 
						||
| 
								 | 
							
								    not IS_64BIT, reason="32-bit builds are buggy"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								class TestMultiline(util.F2PyTest):
							 | 
						||
| 
								 | 
							
								    suffix = ".pyf"
							 | 
						||
| 
								 | 
							
								    module_name = "multiline"
							 | 
						||
| 
								 | 
							
								    code = f"""
							 | 
						||
| 
								 | 
							
								python module {module_name}
							 | 
						||
| 
								 | 
							
								    usercode '''
							 | 
						||
| 
								 | 
							
								void foo(int* x) {{
							 | 
						||
| 
								 | 
							
								    char dummy = ';';
							 | 
						||
| 
								 | 
							
								    *x = 42;
							 | 
						||
| 
								 | 
							
								}}
							 | 
						||
| 
								 | 
							
								'''
							 | 
						||
| 
								 | 
							
								    interface
							 | 
						||
| 
								 | 
							
								        subroutine foo(x)
							 | 
						||
| 
								 | 
							
								            intent(c) foo
							 | 
						||
| 
								 | 
							
								            integer intent(out) :: x
							 | 
						||
| 
								 | 
							
								        end subroutine foo
							 | 
						||
| 
								 | 
							
								    end interface
							 | 
						||
| 
								 | 
							
								end python module {module_name}
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_multiline(self):
							 | 
						||
| 
								 | 
							
								        assert self.module.foo() == 42
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@pytest.mark.skipif(
							 | 
						||
| 
								 | 
							
								    platform.system() == "Darwin",
							 | 
						||
| 
								 | 
							
								    reason="Prone to error when run with numpy/f2py/tests on mac os, "
							 | 
						||
| 
								 | 
							
								    "but not when run in isolation",
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								@pytest.mark.skipif(
							 | 
						||
| 
								 | 
							
								    not IS_64BIT, reason="32-bit builds are buggy"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								@pytest.mark.slow
							 | 
						||
| 
								 | 
							
								class TestCallstatement(util.F2PyTest):
							 | 
						||
| 
								 | 
							
								    suffix = ".pyf"
							 | 
						||
| 
								 | 
							
								    module_name = "callstatement"
							 | 
						||
| 
								 | 
							
								    code = f"""
							 | 
						||
| 
								 | 
							
								python module {module_name}
							 | 
						||
| 
								 | 
							
								    usercode '''
							 | 
						||
| 
								 | 
							
								void foo(int* x) {{
							 | 
						||
| 
								 | 
							
								}}
							 | 
						||
| 
								 | 
							
								'''
							 | 
						||
| 
								 | 
							
								    interface
							 | 
						||
| 
								 | 
							
								        subroutine foo(x)
							 | 
						||
| 
								 | 
							
								            intent(c) foo
							 | 
						||
| 
								 | 
							
								            integer intent(out) :: x
							 | 
						||
| 
								 | 
							
								            callprotoargument int*
							 | 
						||
| 
								 | 
							
								            callstatement {{ &
							 | 
						||
| 
								 | 
							
								                ; &
							 | 
						||
| 
								 | 
							
								                x = 42; &
							 | 
						||
| 
								 | 
							
								            }}
							 | 
						||
| 
								 | 
							
								        end subroutine foo
							 | 
						||
| 
								 | 
							
								    end interface
							 | 
						||
| 
								 | 
							
								end python module {module_name}
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_callstatement(self):
							 | 
						||
| 
								 | 
							
								        assert self.module.foo() == 42
							 |