mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
	
	
		
			42 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			42 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import functools | ||
|  | import unittest | ||
|  | from math import isnan, nextafter | ||
|  | from test.support import requires_IEEE_754 | ||
|  | from test.support.hypothesis_helper import hypothesis | ||
|  | 
 | ||
|  | floats = hypothesis.strategies.floats | ||
|  | integers = hypothesis.strategies.integers | ||
|  | 
 | ||
|  | 
 | ||
|  | def assert_equal_float(x, y): | ||
|  |     assert isnan(x) and isnan(y) or x == y | ||
|  | 
 | ||
|  | 
 | ||
|  | def via_reduce(x, y, steps): | ||
|  |     return functools.reduce(nextafter, [y] * steps, x) | ||
|  | 
 | ||
|  | 
 | ||
|  | class NextafterTests(unittest.TestCase): | ||
|  |     @requires_IEEE_754 | ||
|  |     @hypothesis.given( | ||
|  |         x=floats(), | ||
|  |         y=floats(), | ||
|  |         steps=integers(min_value=0, max_value=2**16)) | ||
|  |     def test_count(self, x, y, steps): | ||
|  |         assert_equal_float(via_reduce(x, y, steps), | ||
|  |                            nextafter(x, y, steps=steps)) | ||
|  | 
 | ||
|  |     @requires_IEEE_754 | ||
|  |     @hypothesis.given( | ||
|  |         x=floats(), | ||
|  |         y=floats(), | ||
|  |         a=integers(min_value=0), | ||
|  |         b=integers(min_value=0)) | ||
|  |     def test_addition_commutes(self, x, y, a, b): | ||
|  |         first = nextafter(x, y, steps=a) | ||
|  |         second = nextafter(first, y, steps=b) | ||
|  |         combined = nextafter(x, y, steps=a+b) | ||
|  |         hypothesis.note(f"{first} -> {second} == {combined}") | ||
|  | 
 | ||
|  |         assert_equal_float(second, combined) |