add init implementation
add tests