ticket:4 add test
ticket:4 add implementation
ticket:4 makeup code