ticket:5 add test
ticket:5 add implementation