| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- import random as r
- r.seed(10)
- for _ in range(100):
- i = r.randint(1, 10)
- assert i <= 10
- assert i >= 1
- i = r.random()
- assert 0.0 <= i <= 1.0
- i = r.uniform(3.0, 9.5)
- assert 3.0 <= i <= 9.5
- a = [1, 2, 3, 4]
- r.shuffle(a)
- for i in range(10):
- assert r.choice(a) in a
- for i in range(10):
- assert r.choice(tuple(a)) in a
- for i in range(10):
- assert r.choice('hello') in 'hello'
- for i in range(10):
- assert r.randint(1, 1) == 1
- # test choices
- x = (1,)
- res = r.choices(x, k=4)
- assert (res == [1, 1, 1, 1]), res
- w = (1, 2, 3)
- assert r.choices([1, 2, 3], (0.0, 0.0, 0.5)) == [3]
- try:
- r.choices([1, 2, 3], (0.0, 0.0, 0.5, 0.5))
- exit(1)
- except ValueError:
- pass
- try:
- r.choices([])
- exit(1)
- except IndexError:
- pass
- seq = [1, 2, 3, 4]
- weights = [0.1, 0.2, 0.2, 0.5]
- k = 1000
- res = r.choices(seq, weights, k=k)
- assert len(res) == k and isinstance(res, list)
- max_error = 0.03
- for i in range(len(seq)):
- actual_w = res.count(seq[i]) / k
- assert abs(actual_w - weights[i]) < max_error
- # test seed
- from random import randint, seed
- seed(7)
- a = randint(1, 100)
- b = randint(-2**60, 1)
- c = randint(50, 100)
- assert (a, b, c) == (16, -418020281577586157, 76)
- seed(7)
- assert a == randint(1, 100)
- assert b == randint(-2**60, 1)
- assert c == randint(50, 100)
- import random
- assert random.Random(7).randint(1, 100) == a
- # test getstate/setstate
- r = random.Random(7)
- for _ in range(5):
- r.random()
- state = r.getstate()
- assert isinstance(state, bytes)
- a = [r.randint(0, 1000) for _ in range(10)]
- r.setstate(state)
- assert a == [r.randint(0, 1000) for _ in range(10)]
- # a state can be moved between generators
- other = random.Random(123)
- other.setstate(r.getstate())
- assert other.random() == r.random()
- # `Random(state)` is equivalent to `setstate`
- assert random.Random(other.getstate()).random() == other.random()
- for bad in [b'', b'123', state[:-1]]:
- try:
- random.Random().setstate(bad)
- exit(1)
- except ValueError:
- pass
- try:
- random.Random().setstate(7)
- exit(1)
- except TypeError:
- pass
- # `mti` must stay within [0, 624+1]
- tmp = list(state)
- for mti in ([0xFF, 0xFF, 0xFF, 0xFF], [0x72, 0x02, 0, 0]):
- try:
- random.Random().setstate(bytes(tmp[:-4] + mti))
- exit(1)
- except ValueError:
- pass
- # module-level generator exposes the same api
- random.seed(456)
- state = random.getstate()
- a = [random.random() for _ in range(5)]
- random.setstate(state)
- assert a == [random.random() for _ in range(5)]
- # test pickle
- import pickle
- r = random.Random(7)
- for _ in range(5):
- r.random()
- r2 = pickle.loads(pickle.dumps(r))
- assert isinstance(r2, random.Random) and r2 is not r
- assert [r.random() for _ in range(10)] == [r2.random() for _ in range(10)]
- # an unseeded generator round-trips as unseeded
- fresh = random.Random()
- assert pickle.loads(pickle.dumps(fresh)).getstate() == fresh.getstate()
- # shared references are preserved
- res = pickle.loads(pickle.dumps([r, r]))
- assert res[0] is res[1]
|