ticket:10 add test
ticket:10 add implementation