test_kind.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import platform
  2. import sys
  3. import pytest
  4. from numpy.f2py.crackfortran import (
  5. _selected_int_kind_func as selected_int_kind,
  6. _selected_real_kind_func as selected_real_kind,
  7. )
  8. from . import util
  9. IS_PPC_OR_AIX = platform.machine().lower().startswith("ppc") or platform.system() == 'AIX'
  10. class TestKind(util.F2PyTest):
  11. sources = [util.getpath("tests", "src", "kind", "foo.f90")]
  12. @pytest.mark.skipif(sys.maxsize < 2 ** 31 + 1,
  13. reason="Fails for 32 bit machines")
  14. def test_int(self):
  15. """Test `int` kind_func for integers up to 10**40."""
  16. selectedintkind = self.module.selectedintkind
  17. for i in range(40):
  18. assert selectedintkind(i) == selected_int_kind(
  19. i
  20. ), f"selectedintkind({i}): expected {selected_int_kind(i)!r} but got {selectedintkind(i)!r}"
  21. def test_real(self):
  22. """
  23. Test (processor-dependent) `real` kind_func for real numbers
  24. of up to 31 digits precision (extended/quadruple).
  25. """
  26. selectedrealkind = self.module.selectedrealkind
  27. for i in range(32):
  28. assert selectedrealkind(i) == selected_real_kind(
  29. i
  30. ), f"selectedrealkind({i}): expected {selected_real_kind(i)!r} but got {selectedrealkind(i)!r}"
  31. @pytest.mark.xfail(IS_PPC_OR_AIX,
  32. reason="Some PowerPC may not support full IEEE 754 precision")
  33. def test_quad_precision(self):
  34. """
  35. Test kind_func for quadruple precision [`real(16)`] of 32+ digits .
  36. """
  37. selectedrealkind = self.module.selectedrealkind
  38. for i in range(32, 40):
  39. assert selectedrealkind(i) == selected_real_kind(
  40. i
  41. ), f"selectedrealkind({i}): expected {selected_real_kind(i)!r} but got {selectedrealkind(i)!r}"