Добавлены тесты, небольшой рефакторинг