#18 add test
#18 add interface
#18 add files