test_kind.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import os
  2. import pytest
  3. import platform
  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. class TestKind(util.F2PyTest):
  10. sources = [util.getpath("tests", "src", "kind", "foo.f90")]
  11. def test_int(self):
  12. """Test `int` kind_func for integers up to 10**40."""
  13. selectedintkind = self.module.selectedintkind
  14. for i in range(40):
  15. assert selectedintkind(i) == selected_int_kind(
  16. i
  17. ), f"selectedintkind({i}): expected {selected_int_kind(i)!r} but got {selectedintkind(i)!r}"
  18. def test_real(self):
  19. """
  20. Test (processor-dependent) `real` kind_func for real numbers
  21. of up to 31 digits precision (extended/quadruple).
  22. """
  23. selectedrealkind = self.module.selectedrealkind
  24. for i in range(32):
  25. assert selectedrealkind(i) == selected_real_kind(
  26. i
  27. ), f"selectedrealkind({i}): expected {selected_real_kind(i)!r} but got {selectedrealkind(i)!r}"
  28. @pytest.mark.xfail(platform.machine().lower().startswith("ppc"),
  29. reason="Some PowerPC may not support full IEEE 754 precision")
  30. def test_quad_precision(self):
  31. """
  32. Test kind_func for quadruple precision [`real(16)`] of 32+ digits .
  33. """
  34. selectedrealkind = self.module.selectedrealkind
  35. for i in range(32, 40):
  36. assert selectedrealkind(i) == selected_real_kind(
  37. i
  38. ), f"selectedrealkind({i}): expected {selected_real_kind(i)!r} but got {selectedrealkind(i)!r}"