ticket:8 add test
ticket:8 add implementation