@@ -517,6 +517,9 @@ impl NormalizedString {
517
517
if let Some ( ( b, prev) ) = self . normalized . char_indices ( ) . last ( ) {
518
518
let transformations = std:: iter:: once ( ( prev, 0 ) ) . chain ( s. chars ( ) . map ( |c| ( c, 1 ) ) ) ;
519
519
self . transform_range ( Range :: Normalized ( b..) , transformations, 0 ) ;
520
+ } else {
521
+ let transformations = s. chars ( ) . map ( |c| ( c, 1 ) ) ;
522
+ self . transform_range ( Range :: Normalized ( ..) , transformations, 0 ) ;
520
523
}
521
524
self
522
525
}
@@ -2284,4 +2287,24 @@ mod tests {
2284
2287
s. lowercase ( ) ;
2285
2288
assert_eq ! ( s. get( ) , "a..." ) ;
2286
2289
}
2290
+
2291
+ #[ test]
2292
+ fn test_append_after_clear ( ) {
2293
+ let mut n = NormalizedString :: from ( "Hello" ) ;
2294
+ assert_eq ! ( n. get( ) , "Hello" ) ;
2295
+
2296
+ n. clear ( ) ;
2297
+ assert_eq ! ( n. get( ) , "" ) ;
2298
+
2299
+ n. append ( " World" ) ;
2300
+ assert_eq ! ( n. get( ) , " World" ) ;
2301
+
2302
+ assert_eq ! ( n. len_original( ) , 5 ) ;
2303
+ assert_eq ! ( n. len( ) , 6 ) ;
2304
+
2305
+ assert_eq ! ( n. get_range_original( Range :: Original ( 0 ..5 ) ) , Some ( "Hello" ) ) ;
2306
+ assert_eq ! ( n. get_range_original( Range :: Normalized ( 0 ..6 ) ) , Some ( "" ) ) ;
2307
+
2308
+ assert_eq ! ( n. get_range( Range :: Normalized ( 0 ..6 ) ) , Some ( " World" ) ) ;
2309
+ }
2287
2310
}
0 commit comments