поправил все оставшиеся баги и добавил тестов. отрефакторил то, что оставалось. теперь методы таки возвращают новый массив а не изменяют старый. финальный коммит.