@@ -163,6 +163,22 @@ TEST_CASE ("contains/occurs") {
163163TEST_CASE (" replace" ) {
164164 CHECK_EQ (replace (" a-b" , " -" , " _" ) == " a_b" , true );
165165 CHECK_EQ (replace (" a-b-c" , " -" , " _" ) == " a_b_c" , true );
166+ // 无命中:内容不变
167+ CHECK_EQ (replace (" abc" , " -" , " _" ) == " abc" , true );
168+ CHECK_EQ (replace (" " , " -" , " _" ) == " " , true );
169+ // 首尾命中与相邻命中
170+ CHECK_EQ (replace (" -a-" , " -" , " _" ) == " _a_" , true );
171+ CHECK_EQ (replace (" a--b" , " -" , " _" ) == " a__b" , true );
172+ // 替换串比模式长/短/为空
173+ CHECK_EQ (replace (" a-b" , " -" , " <->" ) == " a<->b" , true );
174+ CHECK_EQ (replace (" a<->b" , " <->" , " -" ) == " a-b" , true );
175+ CHECK_EQ (replace (" a-b" , " -" , " " ) == " ab" , true );
176+ // 多字符模式不重叠匹配:从左到右,命中后跳过整个模式
177+ CHECK_EQ (replace (" aaaa" , " aa" , " b" ) == " bb" , true );
178+ CHECK_EQ (replace (" aaa" , " aa" , " b" ) == " ba" , true );
179+ // 空模式守卫:原样返回,不死循环
180+ CHECK_EQ (replace (" abc" , " " , " _" ) == " abc" , true );
181+ CHECK_EQ (replace (" " , " " , " _" ) == " " , true );
166182}
167183
168184TEST_CASE (" tokenize" ) {
0 commit comments