Добавил тесты и вообще нехило переделал