54 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			54 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import platform
							 | 
						||
| 
								 | 
							
								import sys
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import pytest
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from numpy.f2py.crackfortran import (
							 | 
						||
| 
								 | 
							
								    _selected_int_kind_func as selected_int_kind,
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								from numpy.f2py.crackfortran import (
							 | 
						||
| 
								 | 
							
								    _selected_real_kind_func as selected_real_kind,
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from . import util
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TestKind(util.F2PyTest):
							 | 
						||
| 
								 | 
							
								    sources = [util.getpath("tests", "src", "kind", "foo.f90")]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @pytest.mark.skipif(sys.maxsize < 2 ** 31 + 1,
							 | 
						||
| 
								 | 
							
								                        reason="Fails for 32 bit machines")
							 | 
						||
| 
								 | 
							
								    def test_int(self):
							 | 
						||
| 
								 | 
							
								        """Test `int` kind_func for integers up to 10**40."""
							 | 
						||
| 
								 | 
							
								        selectedintkind = self.module.selectedintkind
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        for i in range(40):
							 | 
						||
| 
								 | 
							
								            assert selectedintkind(i) == selected_int_kind(
							 | 
						||
| 
								 | 
							
								                i
							 | 
						||
| 
								 | 
							
								            ), f"selectedintkind({i}): expected {selected_int_kind(i)!r} but got {selectedintkind(i)!r}"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_real(self):
							 | 
						||
| 
								 | 
							
								        """
							 | 
						||
| 
								 | 
							
								        Test (processor-dependent) `real` kind_func for real numbers
							 | 
						||
| 
								 | 
							
								        of up to 31 digits precision (extended/quadruple).
							 | 
						||
| 
								 | 
							
								        """
							 | 
						||
| 
								 | 
							
								        selectedrealkind = self.module.selectedrealkind
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        for i in range(32):
							 | 
						||
| 
								 | 
							
								            assert selectedrealkind(i) == selected_real_kind(
							 | 
						||
| 
								 | 
							
								                i
							 | 
						||
| 
								 | 
							
								            ), f"selectedrealkind({i}): expected {selected_real_kind(i)!r} but got {selectedrealkind(i)!r}"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @pytest.mark.xfail(platform.machine().lower().startswith("ppc"),
							 | 
						||
| 
								 | 
							
								                       reason="Some PowerPC may not support full IEEE 754 precision")
							 | 
						||
| 
								 | 
							
								    def test_quad_precision(self):
							 | 
						||
| 
								 | 
							
								        """
							 | 
						||
| 
								 | 
							
								        Test kind_func for quadruple precision [`real(16)`] of 32+ digits .
							 | 
						||
| 
								 | 
							
								        """
							 | 
						||
| 
								 | 
							
								        selectedrealkind = self.module.selectedrealkind
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        for i in range(32, 40):
							 | 
						||
| 
								 | 
							
								            assert selectedrealkind(i) == selected_real_kind(
							 | 
						||
| 
								 | 
							
								                i
							 | 
						||
| 
								 | 
							
								            ), f"selectedrealkind({i}): expected {selected_real_kind(i)!r} but got {selectedrealkind(i)!r}"
							 |