restructure project
add some tests
add some tests