1.add more test case
2.improvement