v1
add test cases
correct two bugs
add edge case
add comment