Skip to content

Простое дерево отрезков на python (с ООП) и unit тесты, написанные для проверки правильности работы программы, и CI.

Notifications You must be signed in to change notification settings

vordex-dd/Segment-tree-and-CI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

progress example workflow

Предисловие

Наверное, довольно странная идея писать дерево отрезков на python, но мне давно хотелось потренироваться в написании unit тестов и настройке CI, и, думаю, что дерево отрезков как раз идеально подходит под эту задачу.

Постановка задачи

Пусть у нас есть массив N и к нам поступает Q запросов следующего типа:

1 l r x прибавить к элементам массива Nl, Nl + 1, ..., Nr - 1, Nr число x

2 l r вывести сумму: Nl + Nl + 1 + ... + Nr - 1 + Nr

Пример

Тест:

5
1 2 3 4 5
4
2 0 4
1 1 3 8
1 0 2 4
2 0 4

Ответ:

15
51

Структура программы

Запуск

Для запуска программы нужно написать:

python main.py

и указать файл с тестом, например, tests/files/main_test.txt

class BaseTree

Данный класс является абстракным базовым классом, на основании уже которых создаются классы Tree и TestTree.

class Tree

У нашего класса Tree есть два метода:

  • get_sum(l, r) - возвращат сумму на отрезке [l, r]
  • do_update(l, r, add) - прибавляет ко всем элементам массива на отрезке [l, r] число add

class TestTree

Данный класс содержит такие же методы, как и Tree и был написан для того, чтобы получать правильные ответы и сверять их с ответами, полученными методами Tree, но за асимтотику О(len(N) * Q)

generate_test

Данная функция используется для генерации файлов с тестами. Все тесты записываются в папку tests/files

Для запуска нужно написать:

python tests/generate_test

и указать два параметра: размер массива и количество запросов к нему.

Тестирование

Для запуска тестирования нужно написать:

python tests/test.py

Также можно запустить тесты вручную с помощью github actions. Бейдж о результатах тестирования находится в самом начале данного файла.

About

Простое дерево отрезков на python (с ООП) и unit тесты, написанные для проверки правильности работы программы, и CI.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages