Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Lib/test/test_random.py

    r2 r391  
    66import pickle
    77import warnings
    8 from math import log, exp, sqrt, pi, fsum as msum
     8from math import log, exp, pi, fsum, sin
     9from functools import reduce
    910from test import test_support
    1011
     
    5354        self.assertNotEqual(state2, state3)
    5455
    55         self.assertRaises(TypeError, self.gen.jumpahead)  # needs an arg
    56         self.assertRaises(TypeError, self.gen.jumpahead, "ick")  # wrong type
    57         self.assertRaises(TypeError, self.gen.jumpahead, 2.3)  # wrong type
    58         self.assertRaises(TypeError, self.gen.jumpahead, 2, 3)  # too many
     56        with test_support.check_py3k_warnings(quiet=True):
     57            self.assertRaises(TypeError, self.gen.jumpahead)  # needs an arg
     58            self.assertRaises(TypeError, self.gen.jumpahead, 2, 3)  # too many
     59
     60    def test_jumpahead_produces_valid_state(self):
     61        # From http://bugs.python.org/issue14591.
     62        self.gen.seed(199210368)
     63        self.gen.jumpahead(13550674232554645900)
     64        for i in range(500):
     65            val = self.gen.random()
     66            self.assertLess(val, 1.0)
    5967
    6068    def test_sample(self):
     
    6876            uniq = set(s)
    6977            self.assertEqual(len(uniq), k)
    70             self.failUnless(uniq <= set(population))
     78            self.assertTrue(uniq <= set(population))
    7179        self.assertEqual(self.gen.sample([], 0), [])  # test edge case N==k==0
    7280
     
    113121            # Verify that we got ints back (keys); the values are complex.
    114122            for x in samp:
    115                 self.assert_(type(x) is int)
     123                self.assertTrue(type(x) is int)
    116124        samp.sort()
    117125        self.assertEqual(samp, range(N))
     
    238246        for i in xrange(100):
    239247            r = self.gen.randrange(span)
    240             self.assert_(0 <= r < span)
     248            self.assertTrue(0 <= r < span)
    241249            cum |= r
    242250        self.assertEqual(cum, span-1)
     
    248256            if stop <= start:
    249257                return
    250             self.assert_(start <= self.gen.randrange(start, stop) < stop)
     258            self.assertTrue(start <= self.gen.randrange(start, stop) < stop)
    251259
    252260    def test_rangelimits(self):
     
    258266        # Verify ranges
    259267        for k in xrange(1, 1000):
    260             self.assert_(0 <= self.gen.getrandbits(k) < 2**k)
     268            self.assertTrue(0 <= self.gen.getrandbits(k) < 2**k)
    261269
    262270        # Verify all bits active
     
    284292            k = int(1.00001 + _log(n, 2))
    285293            self.assertEqual(k, numbits)
    286             self.assert_(n == 2**(k-1))
     294            self.assertTrue(n == 2**(k-1))
    287295
    288296            n += n - 1      # check 1 below the next power of two
    289297            k = int(1.00001 + _log(n, 2))
    290             self.assert_(k in [numbits, numbits+1])
    291             self.assert_(2**k > n > 2**(k-2))
     298            self.assertIn(k, [numbits, numbits+1])
     299            self.assertTrue(2**k > n > 2**(k-2))
    292300
    293301            n -= n >> 15     # check a little farther below the next power of two
    294302            k = int(1.00001 + _log(n, 2))
    295303            self.assertEqual(k, numbits)        # note the stronger assertion
    296             self.assert_(2**k > n > 2**(k-1))   # note the stronger assertion
     304            self.assertTrue(2**k > n > 2**(k-1))   # note the stronger assertion
    297305
    298306
     
    390398        for i in xrange(100):
    391399            r = self.gen.randrange(span)
    392             self.assert_(0 <= r < span)
     400            self.assertTrue(0 <= r < span)
    393401            cum |= r
    394402        self.assertEqual(cum, span-1)
     
    400408            if stop <= start:
    401409                return
    402             self.assert_(start <= self.gen.randrange(start, stop) < stop)
     410            self.assertTrue(start <= self.gen.randrange(start, stop) < stop)
    403411
    404412    def test_rangelimits(self):
     
    414422        # Verify ranges
    415423        for k in xrange(1, 1000):
    416             self.assert_(0 <= self.gen.getrandbits(k) < 2**k)
     424            self.assertTrue(0 <= self.gen.getrandbits(k) < 2**k)
    417425
    418426        # Verify all bits active
     
    440448            k = int(1.00001 + _log(n, 2))
    441449            self.assertEqual(k, numbits)
    442             self.assert_(n == 2**(k-1))
     450            self.assertTrue(n == 2**(k-1))
    443451
    444452            n += n - 1      # check 1 below the next power of two
    445453            k = int(1.00001 + _log(n, 2))
    446             self.assert_(k in [numbits, numbits+1])
    447             self.assert_(2**k > n > 2**(k-2))
     454            self.assertIn(k, [numbits, numbits+1])
     455            self.assertTrue(2**k > n > 2**(k-2))
    448456
    449457            n -= n >> 15     # check a little farther below the next power of two
    450458            k = int(1.00001 + _log(n, 2))
    451459            self.assertEqual(k, numbits)        # note the stronger assertion
    452             self.assert_(2**k > n > 2**(k-1))   # note the stronger assertion
     460            self.assertTrue(2**k > n > 2**(k-1))   # note the stronger assertion
    453461
    454462    def test_randrange_bug_1590891(self):
     
    457465        step = -200
    458466        x = self.gen.randrange(start, stop, step)
    459         self.assert_(stop < x <= start)
     467        self.assertTrue(stop < x <= start)
    460468        self.assertEqual((x+stop)%step, 0)
    461469
    462 _gammacoeff = (0.9999999999995183, 676.5203681218835, -1259.139216722289,
    463               771.3234287757674,  -176.6150291498386, 12.50734324009056,
    464               -0.1385710331296526, 0.9934937113930748e-05, 0.1659470187408462e-06)
    465 
    466 def gamma(z, cof=_gammacoeff, g=7):
    467     z -= 1.0
    468     s = msum([cof[0]] + [cof[i] / (z+i) for i in range(1,len(cof))])
    469     z += 0.5
    470     return (z+g)**z / exp(z+g) * sqrt(2.0*pi) * s
     470def gamma(z, sqrt2pi=(2.0*pi)**0.5):
     471    # Reflection to right half of complex plane
     472    if z < 0.5:
     473        return pi / sin(pi*z) / gamma(1.0-z)
     474    # Lanczos approximation with g=7
     475    az = z + (7.0 - 0.5)
     476    return az ** (z-0.5) / exp(az) * sqrt2pi * fsum([
     477        0.9999999999995183,
     478        676.5203681218835 / z,
     479        -1259.139216722289 / (z+1.0),
     480        771.3234287757674 / (z+2.0),
     481        -176.6150291498386 / (z+3.0),
     482        12.50734324009056 / (z+4.0),
     483        -0.1385710331296526 / (z+5.0),
     484        0.9934937113930748e-05 / (z+6.0),
     485        0.1659470187408462e-06 / (z+7.0),
     486    ])
    471487
    472488class TestDistributions(unittest.TestCase):
     
    479495        g.random = x[:].pop; g.expovariate(1.0)
    480496        g.random = x[:].pop; g.weibullvariate(1.0, 1.0)
     497        g.random = x[:].pop; g.vonmisesvariate(1.0, 1.0)
    481498        g.random = x[:].pop; g.normalvariate(0.0, 1.0)
    482499        g.random = x[:].pop; g.gauss(0.0, 1.0)
     
    499516                (g.triangular, (0.0, 1.0, 1.0/3.0), 4.0/9.0, 7.0/9.0/18.0),
    500517                (g.expovariate, (1.5,), 1/1.5, 1/1.5**2),
     518                (g.vonmisesvariate, (1.23, 0), pi, pi**2/3),
    501519                (g.paretovariate, (5.0,), 5.0/(5.0-1),
    502520                                  5.0/((5.0-1)**2*(5.0-2))),
     
    515533                s2 += (e - mu) ** 2
    516534            N = len(y)
    517             self.assertAlmostEqual(s1/N, mu, 2)
    518             self.assertAlmostEqual(s2/(N-1), sigmasqrd, 2)
     535            self.assertAlmostEqual(s1/N, mu, places=2,
     536                                   msg='%s%r' % (variate.__name__, args))
     537            self.assertAlmostEqual(s2/(N-1), sigmasqrd, places=2,
     538                                   msg='%s%r' % (variate.__name__, args))
     539
     540    def test_constant(self):
     541        g = random.Random()
     542        N = 100
     543        for variate, args, expected in [
     544                (g.uniform, (10.0, 10.0), 10.0),
     545                (g.triangular, (10.0, 10.0), 10.0),
     546                #(g.triangular, (10.0, 10.0, 10.0), 10.0),
     547                (g.expovariate, (float('inf'),), 0.0),
     548                (g.vonmisesvariate, (3.0, float('inf')), 3.0),
     549                (g.gauss, (10.0, 0.0), 10.0),
     550                (g.lognormvariate, (0.0, 0.0), 1.0),
     551                (g.lognormvariate, (-float('inf'), 0.0), 0.0),
     552                (g.normalvariate, (10.0, 0.0), 10.0),
     553                (g.paretovariate, (float('inf'),), 1.0),
     554                (g.weibullvariate, (10.0, float('inf')), 10.0),
     555                (g.weibullvariate, (0.0, 10.0), 0.0),
     556            ]:
     557            for i in range(N):
     558                self.assertEqual(variate(*args), expected)
     559
     560    def test_von_mises_range(self):
     561        # Issue 17149: von mises variates were not consistently in the
     562        # range [0, 2*PI].
     563        g = random.Random()
     564        N = 100
     565        for mu in 0.0, 0.1, 3.1, 6.2:
     566            for kappa in 0.0, 2.3, 500.0:
     567                for _ in range(N):
     568                    sample = g.vonmisesvariate(mu, kappa)
     569                    self.assertTrue(
     570                        0 <= sample <= random.TWOPI,
     571                        msg=("vonmisesvariate({}, {}) produced a result {} out"
     572                             " of range [0, 2*pi]").format(mu, kappa, sample))
     573
     574    def test_von_mises_large_kappa(self):
     575        # Issue #17141: vonmisesvariate() was hang for large kappas
     576        random.vonmisesvariate(0, 1e15)
     577        random.vonmisesvariate(0, 1e100)
     578
    519579
    520580class TestModule(unittest.TestCase):
     
    527587    def test__all__(self):
    528588        # tests validity but not completeness of the __all__ list
    529         self.failUnless(set(random.__all__) <= set(dir(random)))
     589        self.assertTrue(set(random.__all__) <= set(dir(random)))
    530590
    531591    def test_random_subclass_with_kwargs(self):
Note: See TracChangeset for help on using the changeset viewer.