mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Issue #27427: Additional tests for the math module. Thanks Francisco Couzo.
This commit is contained in:
		
							parent
							
								
									85746542ea
								
							
						
					
					
						commit
						31ba1c3de8
					
				
					 2 changed files with 24 additions and 6 deletions
				
			
		|  | @ -15,6 +15,7 @@ | ||||||
| NAN = float('nan') | NAN = float('nan') | ||||||
| INF = float('inf') | INF = float('inf') | ||||||
| NINF = float('-inf') | NINF = float('-inf') | ||||||
|  | FLOAT_MAX = sys.float_info.max | ||||||
| 
 | 
 | ||||||
| # detect evidence of double-rounding: fsum is not always correctly | # detect evidence of double-rounding: fsum is not always correctly | ||||||
| # rounded on machines that suffer from double rounding. | # rounded on machines that suffer from double rounding. | ||||||
|  | @ -271,6 +272,8 @@ def testAcos(self): | ||||||
|         self.ftest('acos(1)', math.acos(1), 0) |         self.ftest('acos(1)', math.acos(1), 0) | ||||||
|         self.assertRaises(ValueError, math.acos, INF) |         self.assertRaises(ValueError, math.acos, INF) | ||||||
|         self.assertRaises(ValueError, math.acos, NINF) |         self.assertRaises(ValueError, math.acos, NINF) | ||||||
|  |         self.assertRaises(ValueError, math.acos, 1 + eps) | ||||||
|  |         self.assertRaises(ValueError, math.acos, -1 - eps) | ||||||
|         self.assertTrue(math.isnan(math.acos(NAN))) |         self.assertTrue(math.isnan(math.acos(NAN))) | ||||||
| 
 | 
 | ||||||
|     def testAcosh(self): |     def testAcosh(self): | ||||||
|  | @ -290,6 +293,8 @@ def testAsin(self): | ||||||
|         self.ftest('asin(1)', math.asin(1), math.pi/2) |         self.ftest('asin(1)', math.asin(1), math.pi/2) | ||||||
|         self.assertRaises(ValueError, math.asin, INF) |         self.assertRaises(ValueError, math.asin, INF) | ||||||
|         self.assertRaises(ValueError, math.asin, NINF) |         self.assertRaises(ValueError, math.asin, NINF) | ||||||
|  |         self.assertRaises(ValueError, math.asin, 1 + eps) | ||||||
|  |         self.assertRaises(ValueError, math.asin, -1 - eps) | ||||||
|         self.assertTrue(math.isnan(math.asin(NAN))) |         self.assertTrue(math.isnan(math.asin(NAN))) | ||||||
| 
 | 
 | ||||||
|     def testAsinh(self): |     def testAsinh(self): | ||||||
|  | @ -469,6 +474,7 @@ def testDegrees(self): | ||||||
|         self.ftest('degrees(pi)', math.degrees(math.pi), 180.0) |         self.ftest('degrees(pi)', math.degrees(math.pi), 180.0) | ||||||
|         self.ftest('degrees(pi/2)', math.degrees(math.pi/2), 90.0) |         self.ftest('degrees(pi/2)', math.degrees(math.pi/2), 90.0) | ||||||
|         self.ftest('degrees(-pi/4)', math.degrees(-math.pi/4), -45.0) |         self.ftest('degrees(-pi/4)', math.degrees(-math.pi/4), -45.0) | ||||||
|  |         self.ftest('degrees(0)', math.degrees(0), 0) | ||||||
| 
 | 
 | ||||||
|     def testExp(self): |     def testExp(self): | ||||||
|         self.assertRaises(TypeError, math.exp) |         self.assertRaises(TypeError, math.exp) | ||||||
|  | @ -478,6 +484,7 @@ def testExp(self): | ||||||
|         self.assertEqual(math.exp(INF), INF) |         self.assertEqual(math.exp(INF), INF) | ||||||
|         self.assertEqual(math.exp(NINF), 0.) |         self.assertEqual(math.exp(NINF), 0.) | ||||||
|         self.assertTrue(math.isnan(math.exp(NAN))) |         self.assertTrue(math.isnan(math.exp(NAN))) | ||||||
|  |         self.assertRaises(OverflowError, math.exp, 1000000) | ||||||
| 
 | 
 | ||||||
|     def testFabs(self): |     def testFabs(self): | ||||||
|         self.assertRaises(TypeError, math.fabs) |         self.assertRaises(TypeError, math.fabs) | ||||||
|  | @ -720,6 +727,7 @@ def testHypot(self): | ||||||
|         self.assertEqual(math.hypot(INF, NAN), INF) |         self.assertEqual(math.hypot(INF, NAN), INF) | ||||||
|         self.assertEqual(math.hypot(NAN, NINF), INF) |         self.assertEqual(math.hypot(NAN, NINF), INF) | ||||||
|         self.assertEqual(math.hypot(NINF, NAN), INF) |         self.assertEqual(math.hypot(NINF, NAN), INF) | ||||||
|  |         self.assertRaises(OverflowError, math.hypot, FLOAT_MAX, FLOAT_MAX) | ||||||
|         self.assertTrue(math.isnan(math.hypot(1.0, NAN))) |         self.assertTrue(math.isnan(math.hypot(1.0, NAN))) | ||||||
|         self.assertTrue(math.isnan(math.hypot(NAN, -2.0))) |         self.assertTrue(math.isnan(math.hypot(NAN, -2.0))) | ||||||
| 
 | 
 | ||||||
|  | @ -773,8 +781,10 @@ def testLog(self): | ||||||
| 
 | 
 | ||||||
|     def testLog1p(self): |     def testLog1p(self): | ||||||
|         self.assertRaises(TypeError, math.log1p) |         self.assertRaises(TypeError, math.log1p) | ||||||
|         n= 2**90 |         for n in [2, 2**90, 2**300]: | ||||||
|         self.assertAlmostEqual(math.log1p(n), math.log1p(float(n))) |             self.assertAlmostEqual(math.log1p(n), math.log1p(float(n))) | ||||||
|  |         self.assertRaises(ValueError, math.log1p, -1) | ||||||
|  |         self.assertEqual(math.log1p(INF), INF) | ||||||
| 
 | 
 | ||||||
|     @requires_IEEE_754 |     @requires_IEEE_754 | ||||||
|     def testLog2(self): |     def testLog2(self): | ||||||
|  | @ -988,6 +998,7 @@ def testRadians(self): | ||||||
|         self.ftest('radians(180)', math.radians(180), math.pi) |         self.ftest('radians(180)', math.radians(180), math.pi) | ||||||
|         self.ftest('radians(90)', math.radians(90), math.pi/2) |         self.ftest('radians(90)', math.radians(90), math.pi/2) | ||||||
|         self.ftest('radians(-45)', math.radians(-45), -math.pi/4) |         self.ftest('radians(-45)', math.radians(-45), -math.pi/4) | ||||||
|  |         self.ftest('radians(0)', math.radians(0), 0) | ||||||
| 
 | 
 | ||||||
|     def testSin(self): |     def testSin(self): | ||||||
|         self.assertRaises(TypeError, math.sin) |         self.assertRaises(TypeError, math.sin) | ||||||
|  | @ -1017,6 +1028,7 @@ def testSqrt(self): | ||||||
|         self.ftest('sqrt(1)', math.sqrt(1), 1) |         self.ftest('sqrt(1)', math.sqrt(1), 1) | ||||||
|         self.ftest('sqrt(4)', math.sqrt(4), 2) |         self.ftest('sqrt(4)', math.sqrt(4), 2) | ||||||
|         self.assertEqual(math.sqrt(INF), INF) |         self.assertEqual(math.sqrt(INF), INF) | ||||||
|  |         self.assertRaises(ValueError, math.sqrt, -1) | ||||||
|         self.assertRaises(ValueError, math.sqrt, NINF) |         self.assertRaises(ValueError, math.sqrt, NINF) | ||||||
|         self.assertTrue(math.isnan(math.sqrt(NAN))) |         self.assertTrue(math.isnan(math.sqrt(NAN))) | ||||||
| 
 | 
 | ||||||
|  | @ -1087,7 +1099,8 @@ def testIsfinite(self): | ||||||
| 
 | 
 | ||||||
|     def testIsnan(self): |     def testIsnan(self): | ||||||
|         self.assertTrue(math.isnan(float("nan"))) |         self.assertTrue(math.isnan(float("nan"))) | ||||||
|         self.assertTrue(math.isnan(float("inf")* 0.)) |         self.assertTrue(math.isnan(float("-nan"))) | ||||||
|  |         self.assertTrue(math.isnan(float("inf") * 0.)) | ||||||
|         self.assertFalse(math.isnan(float("inf"))) |         self.assertFalse(math.isnan(float("inf"))) | ||||||
|         self.assertFalse(math.isnan(0.)) |         self.assertFalse(math.isnan(0.)) | ||||||
|         self.assertFalse(math.isnan(1.)) |         self.assertFalse(math.isnan(1.)) | ||||||
|  | @ -1380,7 +1393,8 @@ def test_decimals(self): | ||||||
| 
 | 
 | ||||||
|         decimal_examples = [(Decimal('1.00000001'), Decimal('1.0')), |         decimal_examples = [(Decimal('1.00000001'), Decimal('1.0')), | ||||||
|                             (Decimal('1.00000001e-20'), Decimal('1.0e-20')), |                             (Decimal('1.00000001e-20'), Decimal('1.0e-20')), | ||||||
|                             (Decimal('1.00000001e-100'), Decimal('1.0e-100'))] |                             (Decimal('1.00000001e-100'), Decimal('1.0e-100')), | ||||||
|  |                             (Decimal('1.00000001e20'), Decimal('1.0e20'))] | ||||||
|         self.assertAllClose(decimal_examples, rel_tol=1e-8) |         self.assertAllClose(decimal_examples, rel_tol=1e-8) | ||||||
|         self.assertAllNotClose(decimal_examples, rel_tol=1e-9) |         self.assertAllNotClose(decimal_examples, rel_tol=1e-9) | ||||||
| 
 | 
 | ||||||
|  | @ -1388,8 +1402,10 @@ def test_fractions(self): | ||||||
|         # test with Fraction values |         # test with Fraction values | ||||||
|         from fractions import Fraction |         from fractions import Fraction | ||||||
| 
 | 
 | ||||||
|         # could use some more examples here! |         fraction_examples = [ | ||||||
|         fraction_examples = [(Fraction(1, 100000000) + 1, Fraction(1))] |             (Fraction(1, 100000000) + 1, Fraction(1)), | ||||||
|  |             (Fraction(100000001), Fraction(100000000)), | ||||||
|  |             (Fraction(10**8 + 1, 10**28), Fraction(1, 10**20))] | ||||||
|         self.assertAllClose(fraction_examples, rel_tol=1e-8) |         self.assertAllClose(fraction_examples, rel_tol=1e-8) | ||||||
|         self.assertAllNotClose(fraction_examples, rel_tol=1e-9) |         self.assertAllNotClose(fraction_examples, rel_tol=1e-9) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -135,6 +135,8 @@ Library | ||||||
| Tests | Tests | ||||||
| ----- | ----- | ||||||
| 
 | 
 | ||||||
|  | - Issue #27427: Additional tests for the math module. Patch by Francisco Couzo. | ||||||
|  | 
 | ||||||
| - Issue #27953: Skip math and cmath tests that fail on OS X 10.4 due to a | - Issue #27953: Skip math and cmath tests that fail on OS X 10.4 due to a | ||||||
|   poor libm implementation of tan. |   poor libm implementation of tan. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Mark Dickinson
						Mark Dickinson