diff options
author | Ralf Gommers <ralf.gommers@gmail.com> | 2021-06-13 18:49:19 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-13 18:49:19 +0200 |
commit | 0cb9f7f7aa8f4255fafb5431dcc595ce183bc376 (patch) | |
tree | 3292011a5ea50503a92aa0f14624295ce8e5c58b /numpy/f2py/tests/test_string.py | |
parent | b5cc1f80c6747e6c19adeaf241d2d471d2b71cb7 (diff) | |
download | numpy-0cb9f7f7aa8f4255fafb5431dcc595ce183bc376.tar.gz |
Revert "BUG: revise string_from_pyobj/try_pyarr_from_string with respect to malloc and copy." (#19235)
Diffstat (limited to 'numpy/f2py/tests/test_string.py')
-rw-r--r-- | numpy/f2py/tests/test_string.py | 146 |
1 files changed, 2 insertions, 144 deletions
diff --git a/numpy/f2py/tests/test_string.py b/numpy/f2py/tests/test_string.py index 1530c58f6..e3ec96af9 100644 --- a/numpy/f2py/tests/test_string.py +++ b/numpy/f2py/tests/test_string.py @@ -1,6 +1,6 @@ import os import pytest -import textwrap + from numpy.testing import assert_array_equal import numpy as np from . import util @@ -9,156 +9,14 @@ from . import util def _path(*a): return os.path.join(*((os.path.dirname(__file__),) + a)) - class TestString(util.F2PyTest): sources = [_path('src', 'string', 'char.f90')] @pytest.mark.slow def test_char(self): strings = np.array(['ab', 'cd', 'ef'], dtype='c').T - inp, out = self.module.char_test.change_strings(strings, - strings.shape[1]) + inp, out = self.module.char_test.change_strings(strings, strings.shape[1]) assert_array_equal(inp, strings) expected = strings.copy() expected[1, :] = 'AAA' assert_array_equal(out, expected) - - -class TestDocStringArguments(util.F2PyTest): - suffix = '.f' - - code = """ -C FILE: STRING.F - SUBROUTINE FOO(A,B,C,D) - CHARACTER*5 A, B - CHARACTER*(*) C,D -Cf2py intent(in) a,c -Cf2py intent(inout) b,d - PRINT*, "A=",A - PRINT*, "B=",B - PRINT*, "C=",C - PRINT*, "D=",D - PRINT*, "CHANGE A,B,C,D" - A(1:1) = 'A' - B(1:1) = 'B' - C(1:1) = 'C' - D(1:1) = 'D' - PRINT*, "A=",A - PRINT*, "B=",B - PRINT*, "C=",C - PRINT*, "D=",D - END -C END OF FILE STRING.F - """ - - def test_example(self): - a = np.array(b'123\0\0') - b = np.array(b'123\0\0') - c = np.array(b'123') - d = np.array(b'123') - - self.module.foo(a, b, c, d) - - assert a.tobytes() == b'123\0\0' - assert b.tobytes() == b'B23\0\0', (b.tobytes(),) - assert c.tobytes() == b'123' - assert d.tobytes() == b'D23' - - -class TestFixedString(util.F2PyTest): - suffix = '.f90' - - code = textwrap.dedent(""" - function sint(s) result(i) - implicit none - character(len=*) :: s - integer :: j, i - i = 0 - do j=1, len(s) - i = i + ichar(s(j:j)) * 10 ** (j - 1) - end do - return - end function sint - - function test_in_bytes4(a) result (i) - implicit none - integer :: sint - character(len=4) :: a - integer :: i - i = sint(a) - a(1:1) = 'A' - return - end function test_in_bytes4 - - function test_inout_bytes4(a) result (i) - implicit none - integer :: sint - character(len=4), intent(inout) :: a - integer :: i - if (ichar(a(1:1)).ne.0) then - a(1:1) = 'E' - endif - i = sint(a) - return - end function test_inout_bytes4 - """) - - @staticmethod - def _sint(s, start=0, end=None): - """Return the content of a string buffer as integer value. - - For example: - _sint('1234') -> 4321 - _sint('123A') -> 17321 - """ - if isinstance(s, np.ndarray): - s = s.tobytes() - elif isinstance(s, str): - s = s.encode() - assert isinstance(s, bytes) - if end is None: - end = len(s) - i = 0 - for j in range(start, min(end, len(s))): - i += s[j] * 10 ** j - return i - - def _get_input(self, intent='in'): - if intent in ['in']: - yield '' - yield '1' - yield '1234' - yield '12345' - yield b'' - yield b'\0' - yield b'1' - yield b'\01' - yield b'1\0' - yield b'1234' - yield b'12345' - yield np.ndarray((), np.bytes_, buffer=b'') # array(b'', dtype='|S0') - yield np.array(b'') # array(b'', dtype='|S1') - yield np.array(b'\0') - yield np.array(b'1') - yield np.array(b'1\0') - yield np.array(b'\01') - yield np.array(b'1234') - yield np.array(b'123\0') - yield np.array(b'12345') - - def test_intent_in(self): - for s in self._get_input(): - r = self.module.test_in_bytes4(s) - # also checks that s is not changed inplace - expected = self._sint(s, end=4) - assert r == expected, (s) - - def test_intent_inout(self): - for s in self._get_input(intent='inout'): - rest = self._sint(s, start=4) - r = self.module.test_inout_bytes4(s) - expected = self._sint(s, end=4) - assert r == expected - - # check that the rest of input string is preserved - assert rest == self._sint(s, start=4) |