добавил тесты и комментарии