import pytest import textwrap from . import util from numpy.testing import IS_PYPY @pytest.mark.slow class TestModuleFilterPublicEntities(util.F2PyTest): sources = [ util.getpath( "tests", "src", "modules", "gh26920", "two_mods_with_one_public_routine.f90" ) ] # we filter the only public function mod2 only = ["mod1_func1", ] def test_gh26920(self): # if it compiles and can be loaded, things are fine pass @pytest.mark.slow class TestModuleWithoutPublicEntities(util.F2PyTest): sources = [ util.getpath( "tests", "src", "modules", "gh26920", "two_mods_with_no_public_entities.f90" ) ] only = ["mod1_func1", ] def test_gh26920(self): # if it compiles and can be loaded, things are fine pass @pytest.mark.slow class TestModuleDocString(util.F2PyTest): sources = [util.getpath("tests", "src", "modules", "module_data_docstring.f90")] @pytest.mark.xfail(IS_PYPY, reason="PyPy cannot modify tp_doc after PyType_Ready") def test_module_docstring(self): assert self.module.mod.__doc__ == textwrap.dedent( """\ i : 'i'-scalar x : 'i'-array(4) a : 'f'-array(2,3) b : 'f'-array(-1,-1), not allocated\x00 foo()\n Wrapper for ``foo``.\n\n""" ) @pytest.mark.slow class TestModuleAndSubroutine(util.F2PyTest): module_name = "example" sources = [ util.getpath("tests", "src", "modules", "gh25337", "data.f90"), util.getpath("tests", "src", "modules", "gh25337", "use_data.f90"), ] def test_gh25337(self): self.module.data.set_shift(3) assert "data" in dir(self.module) @pytest.mark.slow class TestUsedModule(util.F2PyTest): module_name = "fmath" sources = [ util.getpath("tests", "src", "modules", "use_modules.f90"), ] def test_gh25867(self): compiled_mods = [x for x in dir(self.module) if "__" not in x] assert "useops" in compiled_mods assert self.module.useops.sum_and_double(3, 7) == 20 assert "mathops" in compiled_mods assert self.module.mathops.add(3, 7) == 10