first commit
add code logic
complete and add testcase