first version
add unit test code