Skip to content

Commit 2a1fcd2

Browse files
committed
test: add tests for the PseudoRandom with checking for reproducibility, boundaries, and UUID format
1 parent 27ac6ac commit 2a1fcd2

1 file changed

Lines changed: 68 additions & 0 deletions

File tree

tests/test_random.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
from pycustomrand.random_generator import PseudoRandom
2+
import unittest
3+
4+
5+
class TestPseudoRandom(unittest.TestCase):
6+
7+
def setUp(self):
8+
"""Выполняется перед каждым тестом"""
9+
# Сброс сида перед каждым тестом (для чистоты)
10+
PseudoRandom.set_seed(None)
11+
12+
def test_reproducibility_with_seed(self):
13+
"""Главный тест: проверка работы Seed"""
14+
seed_value = "TestSeed123"
15+
16+
# Запуск 1
17+
PseudoRandom.set_seed(seed_value)
18+
val1 = PseudoRandom.random()
19+
val2 = PseudoRandom.random_integer(0, 100)
20+
21+
# Запуск 2 (с тем же сидом)
22+
PseudoRandom.set_seed(seed_value)
23+
val1_again = PseudoRandom.random()
24+
val2_again = PseudoRandom.random_integer(0, 100)
25+
26+
self.assertEqual(val1, val1_again, "Seed не работает: float значения разные")
27+
self.assertEqual(val2, val2_again, "Seed не работает: integer значения разные")
28+
29+
def test_randrange_bounds(self):
30+
"""Проверка границ randrange"""
31+
for _ in range(100):
32+
val = PseudoRandom.randrange(0, 5)
33+
self.assertGreaterEqual(val, 0)
34+
self.assertLess(val, 5) # Строго меньше 5
35+
36+
def test_random_integer_bounds(self):
37+
"""Проверка границ random_integer (включительно)"""
38+
found_max = False
39+
for _ in range(200):
40+
val = PseudoRandom.random_integer(1, 3)
41+
self.assertGreaterEqual(val, 1)
42+
self.assertLessEqual(val, 3)
43+
if val == 3:
44+
found_max = True
45+
# Надежда на то, что за 200 попыток хоть раз выпадет 3 (верхняя граница)
46+
self.assertTrue(found_max, "Верхняя граница random_integer не достигается")
47+
48+
def test_choice_error(self):
49+
"""Проверка, что пустой массив возвращает None"""
50+
self.assertIsNone(PseudoRandom.choice([]))
51+
52+
def test_random_bytes_length(self):
53+
"""Проверка длины байтов"""
54+
b = PseudoRandom.random_bytes(10)
55+
self.assertEqual(len(b), 10)
56+
self.assertIsInstance(b, bytes)
57+
58+
def test_uuid4_format(self):
59+
"""Проверка формата UUID (если ты добавил эту функцию)"""
60+
if hasattr(PseudoRandom, 'uuid4'):
61+
uuid = PseudoRandom.uuid4()
62+
self.assertEqual(len(uuid), 36)
63+
self.assertEqual(uuid[14], '4') # Версия UUID всегда 4
64+
self.assertIn(uuid[19], ['8', '9', 'a', 'b']) # Вариант UUID
65+
66+
67+
if __name__ == '__main__':
68+
unittest.main()

0 commit comments

Comments
 (0)