mirror of
https://github.com/python/cpython.git
synced 2025-08-29 05:05:03 +00:00
Fix corner case for Random.choice() and add tests.
This commit is contained in:
parent
c324697bac
commit
dc4872eefe
2 changed files with 12 additions and 1 deletions
|
@ -239,7 +239,11 @@ class Random(_random.Random):
|
||||||
|
|
||||||
def choice(self, seq):
|
def choice(self, seq):
|
||||||
"""Choose a random element from a non-empty sequence."""
|
"""Choose a random element from a non-empty sequence."""
|
||||||
return seq[self._randbelow(len(seq))] # raises IndexError if seq is empty
|
try:
|
||||||
|
i = self._randbelow(len(seq))
|
||||||
|
except ValueError:
|
||||||
|
raise IndexError('Cannot choose from an empty sequence')
|
||||||
|
return seq[i]
|
||||||
|
|
||||||
def shuffle(self, x, random=None, int=int):
|
def shuffle(self, x, random=None, int=int):
|
||||||
"""x, random=random.random -> shuffle list x in place; return None.
|
"""x, random=random.random -> shuffle list x in place; return None.
|
||||||
|
|
|
@ -42,6 +42,13 @@ class TestBasicOps(unittest.TestCase):
|
||||||
self.assertRaises(TypeError, self.gen.seed, 1, 2, 3, 4)
|
self.assertRaises(TypeError, self.gen.seed, 1, 2, 3, 4)
|
||||||
self.assertRaises(TypeError, type(self.gen), [])
|
self.assertRaises(TypeError, type(self.gen), [])
|
||||||
|
|
||||||
|
def test_choice(self):
|
||||||
|
choice = self.gen.choice
|
||||||
|
with self.assertRaises(IndexError):
|
||||||
|
choice([])
|
||||||
|
self.assertEqual(choice([50]), 50)
|
||||||
|
self.assertIn(choice([25, 75]), [25, 75])
|
||||||
|
|
||||||
def test_sample(self):
|
def test_sample(self):
|
||||||
# For the entire allowable range of 0 <= k <= N, validate that
|
# For the entire allowable range of 0 <= k <= N, validate that
|
||||||
# the sample is of the correct length and contains only unique items
|
# the sample is of the correct length and contains only unique items
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue