Skip to content

Commit 2398014

Browse files
authored
docs: add test and diagnostics section with img spoiler
1 parent da18d6d commit 2398014

File tree

1 file changed

+68
-2
lines changed

1 file changed

+68
-2
lines changed

README.md

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ PyCustomRand писался как альтернатива этим двум в
2323
* Данная библиотека **проще** написана — весь код закомментирован, лёгок и понятен. В основе реализации генератора псевдослучайных чисел лежит *несложный* алгоритм (использующий системное время) поэтому библиотеку легко кастомизировать/расширять/дополнять под себя.
2424
* В большинстве своём PyCustomRand выдаёт более *"энтропичный"* результат при нескольких генерациях подряд по сравнению со встроенным `random`-модулем.
2525
* <details>
26-
<summary>Сравнение с диаграммами</summary>
26+
<summary>📊 Сравнение с диаграммами</summary>
2727
2828
PyCustomRand демонстрирует **на 173%** более высокую кучность распределения по сравнению со стандартной библиотекой `random` в тестах на **1,000,000** итераций.
2929

@@ -54,7 +54,7 @@ PyCustomRand писался как альтернатива этим двум в
5454
</details>
5555
* Библиотека включает в себя все самые главные функции из [оригинальной](https://docs.python.org/3/library/random.html) Python-библиотеки, но только местами улучшенные и упрощённые (например: `random_integer` может выдавать сгенерированный результат, делимый на заданное число из диапазона; результат функции `random_float` можно округлять и пр.)
5656
* <details>
57-
<summary>Список функций</summary>
57+
<summary>📑 Список функций</summary>
5858

5959
* Генерация целых чисел (`random_integer`, `randrange`, `gen_random_number`).
6060
* Генерация вещественных чисел (`random`, `random_float`).
@@ -291,6 +291,7 @@ print(random_bool()) # Случайное значение True/False, н
291291

292292
</details>
293293

294+
294295
### 🎯 О модуле `true_round`
295296
Модуль решает проблему "банковского округления" в Python 3, где `round(x.5)` округляется до ближайшего чётного числа.
296297
`true_round` использует **честное математическое округление** (отсюда и название "true" — истинное/честное).
@@ -306,6 +307,71 @@ print(random_bool()) # Случайное значение True/False, н
306307
| **0.00049** (до 3-ёх знаков) | 0.0 | **0.001** | Точность при работе с малыми числами |
307308

308309

310+
## 🧪 Тестирование и Диагностика
311+
PyCustomRand предоставляет внутренние инструменты для проверки работоспособности библиотеки и качества энтропии генератора случайных чисел.
312+
313+
### 1. Запуск всех Unit-тестов
314+
Чтобы убедиться, что все функции работают корректно и библиотека установлена правильно, запустите встроенные тесты, находясь в корне репозитория:
315+
316+
```bash
317+
python -m unittest discover tests
318+
```
319+
320+
### 1.1. Запуск Unit-тестов конкретного модуля (рандома/округления)
321+
Отдельный запуск проверки модуля генератора случайных чисел:
322+
323+
```bash
324+
python -m unittest tests/test_random.py
325+
```
326+
327+
Отдельный запуск проверки модуля округления чисел:
328+
329+
```bash
330+
python -m unittest tests/test_round.py
331+
```
332+
333+
### 1.2. Запуск конкретного теста в конкретном модуле
334+
Если вы модифицируете библиотеку, и у вас постоянно не проходит проверку какой-то один конкретный тест, то вы можете не затрачивать время на запуск всех тестов — вам достаточно запустить один конкретный тест конкретного модуля, например:
335+
336+
```python
337+
from tests.test_round import TestTrueRound
338+
import unittest
339+
340+
# Запуск теста "округления отрицательных чисел" для функции true_round
341+
unittest.main(defaultTest='TestTrueRound.test_negative_numbers')
342+
```
343+
344+
### 2. Проверка распределения (Диагностика)
345+
В библиотеку встроен декоратор `@check_distribution` (находится в `pycustomrand.diagnostics`). Он позволяет визуально оценить равномерность генерации чисел. Пример использования декоратора:
346+
347+
```python
348+
from pycustomrand.diagnostics import check_distribution
349+
import pycustomrand as pcr
350+
351+
# Декоратор запустит функцию 100.000 раз и разобьёт результаты на 20 корзин
352+
@check_distribution(count=100_000, buckets=20)
353+
def check_float_random():
354+
return pcr.random()
355+
356+
if __name__ == "__main__":
357+
check_float_random()
358+
```
359+
360+
Результат в консоли показывает:
361+
* На какой сейчас итерации находится диагностика (каждые 5 секунд);
362+
* Полное время выполнения генерации;
363+
* Таблицу с количеством попаданий в каждую "корзину" (диапазон);
364+
* Процентное отклонение от идеального распределения;
365+
* Вердикт: "Отличное равномерное распределение" или предупреждение о перекосах.
366+
367+
<details>
368+
<summary>📊 Пример результата диагностики</summary>
369+
<div align="center">
370+
<img src="https://i.imgur.com/WUzDRfY.png" width="40%">
371+
</div>
372+
</details>
373+
374+
309375
## 📂 Структура репозитория
310376
Проект имеет следующую файловую структуру:
311377

0 commit comments

Comments
 (0)