简化逻辑，添加测试用例 fix #21