mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Issue #13355: Raise ValueError on random.triangular call with invalid params.
Initial patch by Yuriy Senko.
This commit is contained in:
		
							parent
							
								
									7b2c8bb833
								
							
						
					
					
						commit
						a2dfc35a13
					
				
					 4 changed files with 45 additions and 1 deletions
				
			
		|  | @ -341,6 +341,16 @@ def triangular(self, low=0.0, high=1.0, mode=None): | |||
|         http://en.wikipedia.org/wiki/Triangular_distribution | ||||
| 
 | ||||
|         """ | ||||
|         # Sanity check. According to the doc low must be less or equal to | ||||
|         # high. And mode should be somewhere between these bounds. | ||||
|         if low > high: | ||||
|             raise ValueError('high cannot be less then low.') | ||||
|         if mode is not None and (mode < low or mode > high): | ||||
|             raise ValueError('mode must be between low and high.') | ||||
| 
 | ||||
|         if high == low: | ||||
|             return low | ||||
| 
 | ||||
|         u = self.random() | ||||
|         c = 0.5 if mode is None else (mode - low) / (high - low) | ||||
|         if u > c: | ||||
|  |  | |||
|  | @ -46,6 +46,36 @@ def __hash__(self): | |||
|         self.assertRaises(TypeError, self.gen.seed, 1, 2, 3, 4) | ||||
|         self.assertRaises(TypeError, type(self.gen), []) | ||||
| 
 | ||||
|     def test_triangular(self): | ||||
|         # Check that triangular() correctly handles bad input. See issue 13355. | ||||
| 
 | ||||
|         # mode > high. | ||||
|         with self.assertRaises(ValueError): | ||||
|             random.triangular(mode=2) | ||||
|         with self.assertRaises(ValueError): | ||||
|             random.triangular(low=1, high=10, mode=11) | ||||
|         with self.assertRaises(ValueError): | ||||
|             random.triangular(low=1, high=1, mode=11) | ||||
| 
 | ||||
|         # mode < low. | ||||
|         with self.assertRaises(ValueError): | ||||
|             random.triangular(mode=-1) | ||||
|         with self.assertRaises(ValueError): | ||||
|             random.triangular(low=1, high=10, mode=0) | ||||
|         with self.assertRaises(ValueError): | ||||
|             random.triangular(low=1, high=1, mode=0) | ||||
| 
 | ||||
|         # low > high | ||||
|         with self.assertRaises(ValueError): | ||||
|             random.triangular(low=5, high=2) | ||||
|         with self.assertRaises(ValueError): | ||||
|             random.triangular(low=5, high=2, mode=1) | ||||
|         with self.assertRaises(ValueError): | ||||
|            random.triangular(low=-2, high=-5) | ||||
| 
 | ||||
|         self.assertEqual(random.triangular(low=10, high=10), 10) | ||||
|         self.assertEqual(random.triangular(low=10, high=10, mode=10), 10) | ||||
| 
 | ||||
|     def test_choice(self): | ||||
|         choice = self.gen.choice | ||||
|         with self.assertRaises(IndexError): | ||||
|  | @ -489,7 +519,7 @@ def test_constant(self): | |||
|         for variate, args, expected in [ | ||||
|                 (g.uniform, (10.0, 10.0), 10.0), | ||||
|                 (g.triangular, (10.0, 10.0), 10.0), | ||||
|                 #(g.triangular, (10.0, 10.0, 10.0), 10.0), | ||||
|                 (g.triangular, (10.0, 10.0, 10.0), 10.0), | ||||
|                 (g.expovariate, (float('inf'),), 0.0), | ||||
|                 (g.vonmisesvariate, (3.0, float('inf')), 3.0), | ||||
|                 (g.gauss, (10.0, 0.0), 10.0), | ||||
|  |  | |||
|  | @ -1088,6 +1088,7 @@ Nick Seidenman | |||
| Žiga Seilnacht | ||||
| Yury Selivanov | ||||
| Fred Sells | ||||
| Yuriy Senko | ||||
| Jiwon Seo | ||||
| Iñigo Serna | ||||
| Joakim Sernbrant | ||||
|  |  | |||
|  | @ -23,6 +23,9 @@ Core and Builtins | |||
| Library | ||||
| ------- | ||||
| 
 | ||||
| - Issue #13355: Raise ValueError on random.triangular call with invalid params. | ||||
|   Initial patch by Yuriy Senko. | ||||
| 
 | ||||
| - Issue #16658: add missing return to HTTPConnection.send() | ||||
|   Patch by Jeff Knupp. | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andrew Svetlov
						Andrew Svetlov