add test cases
handle weird cases
0.0.3