Changeset 391 for python/trunk/Lib/test/test_random.py
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Lib/test/test_random.py
r2 r391 6 6 import pickle 7 7 import warnings 8 from math import log, exp, sqrt, pi, fsum as msum 8 from math import log, exp, pi, fsum, sin 9 from functools import reduce 9 10 from test import test_support 10 11 … … 53 54 self.assertNotEqual(state2, state3) 54 55 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) 59 67 60 68 def test_sample(self): … … 68 76 uniq = set(s) 69 77 self.assertEqual(len(uniq), k) 70 self. failUnless(uniq <= set(population))78 self.assertTrue(uniq <= set(population)) 71 79 self.assertEqual(self.gen.sample([], 0), []) # test edge case N==k==0 72 80 … … 113 121 # Verify that we got ints back (keys); the values are complex. 114 122 for x in samp: 115 self.assert _(type(x) is int)123 self.assertTrue(type(x) is int) 116 124 samp.sort() 117 125 self.assertEqual(samp, range(N)) … … 238 246 for i in xrange(100): 239 247 r = self.gen.randrange(span) 240 self.assert _(0 <= r < span)248 self.assertTrue(0 <= r < span) 241 249 cum |= r 242 250 self.assertEqual(cum, span-1) … … 248 256 if stop <= start: 249 257 return 250 self.assert _(start <= self.gen.randrange(start, stop) < stop)258 self.assertTrue(start <= self.gen.randrange(start, stop) < stop) 251 259 252 260 def test_rangelimits(self): … … 258 266 # Verify ranges 259 267 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) 261 269 262 270 # Verify all bits active … … 284 292 k = int(1.00001 + _log(n, 2)) 285 293 self.assertEqual(k, numbits) 286 self.assert _(n == 2**(k-1))294 self.assertTrue(n == 2**(k-1)) 287 295 288 296 n += n - 1 # check 1 below the next power of two 289 297 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)) 292 300 293 301 n -= n >> 15 # check a little farther below the next power of two 294 302 k = int(1.00001 + _log(n, 2)) 295 303 self.assertEqual(k, numbits) # note the stronger assertion 296 self.assert _(2**k > n > 2**(k-1)) # note the stronger assertion304 self.assertTrue(2**k > n > 2**(k-1)) # note the stronger assertion 297 305 298 306 … … 390 398 for i in xrange(100): 391 399 r = self.gen.randrange(span) 392 self.assert _(0 <= r < span)400 self.assertTrue(0 <= r < span) 393 401 cum |= r 394 402 self.assertEqual(cum, span-1) … … 400 408 if stop <= start: 401 409 return 402 self.assert _(start <= self.gen.randrange(start, stop) < stop)410 self.assertTrue(start <= self.gen.randrange(start, stop) < stop) 403 411 404 412 def test_rangelimits(self): … … 414 422 # Verify ranges 415 423 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) 417 425 418 426 # Verify all bits active … … 440 448 k = int(1.00001 + _log(n, 2)) 441 449 self.assertEqual(k, numbits) 442 self.assert _(n == 2**(k-1))450 self.assertTrue(n == 2**(k-1)) 443 451 444 452 n += n - 1 # check 1 below the next power of two 445 453 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)) 448 456 449 457 n -= n >> 15 # check a little farther below the next power of two 450 458 k = int(1.00001 + _log(n, 2)) 451 459 self.assertEqual(k, numbits) # note the stronger assertion 452 self.assert _(2**k > n > 2**(k-1)) # note the stronger assertion460 self.assertTrue(2**k > n > 2**(k-1)) # note the stronger assertion 453 461 454 462 def test_randrange_bug_1590891(self): … … 457 465 step = -200 458 466 x = self.gen.randrange(start, stop, step) 459 self.assert _(stop < x <= start)467 self.assertTrue(stop < x <= start) 460 468 self.assertEqual((x+stop)%step, 0) 461 469 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 470 def 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 ]) 471 487 472 488 class TestDistributions(unittest.TestCase): … … 479 495 g.random = x[:].pop; g.expovariate(1.0) 480 496 g.random = x[:].pop; g.weibullvariate(1.0, 1.0) 497 g.random = x[:].pop; g.vonmisesvariate(1.0, 1.0) 481 498 g.random = x[:].pop; g.normalvariate(0.0, 1.0) 482 499 g.random = x[:].pop; g.gauss(0.0, 1.0) … … 499 516 (g.triangular, (0.0, 1.0, 1.0/3.0), 4.0/9.0, 7.0/9.0/18.0), 500 517 (g.expovariate, (1.5,), 1/1.5, 1/1.5**2), 518 (g.vonmisesvariate, (1.23, 0), pi, pi**2/3), 501 519 (g.paretovariate, (5.0,), 5.0/(5.0-1), 502 520 5.0/((5.0-1)**2*(5.0-2))), … … 515 533 s2 += (e - mu) ** 2 516 534 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 519 579 520 580 class TestModule(unittest.TestCase): … … 527 587 def test__all__(self): 528 588 # 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))) 530 590 531 591 def test_random_subclass_with_kwargs(self):
Note:
See TracChangeset
for help on using the changeset viewer.