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
 |