summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2003-09-06 04:25:54 (GMT)
committerRaymond Hettinger <python@rcn.com>2003-09-06 04:25:54 (GMT)
commit66d09f1b3029d9cf975ccf26c437c9fb2605db91 (patch)
treeb8c031f72f6109de1be68664fc391c9a334a3f28 /Lib/test
parentc8b08b446a95694cf246c3fd92c1bc656944d68f (diff)
downloadcpython-66d09f1b3029d9cf975ccf26c437c9fb2605db91.zip
cpython-66d09f1b3029d9cf975ccf26c437c9fb2605db91.tar.gz
cpython-66d09f1b3029d9cf975ccf26c437c9fb2605db91.tar.bz2
SF bug #801342: Bug (documentation or real, your choice) in random.sample.
random.sample() uses one of two algorithms depending on the ratio of the sample size to the population size. One of the algorithms accepted any iterable population argument so long as it defined __len__(). The other had a stronger requirement that the population argument be indexable. While it met the documentation specifications which insisted that the population argument be a sequence, it made random.sample() less usable with sets. So, the second algorithm was modified to coerce non-indexable iterables and dictionaries into a tuple before proceeding.
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_random.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py
index c9103e8..fbd4184 100644
--- a/Lib/test/test_random.py
+++ b/Lib/test/test_random.py
@@ -86,6 +86,16 @@ class TestBasicOps(unittest.TestCase):
else:
self.fail()
+ def test_sample_inputs(self):
+ # SF bug #801342 -- population can be any iterable defining __len__()
+ from sets import Set
+ self.gen.sample(Set(range(20)), 2)
+ self.gen.sample(range(20), 2)
+ self.gen.sample(xrange(20), 2)
+ self.gen.sample(dict.fromkeys('abcdefghijklmnopqrst'), 2)
+ self.gen.sample(str('abcdefghijklmnopqrst'), 2)
+ self.gen.sample(tuple('abcdefghijklmnopqrst'), 2)
+
def test_gauss(self):
# Ensure that the seed() method initializes all the hidden state. In
# particular, through 2.2.1 it failed to reset a piece of state used