@@ -336,7 +336,7 @@ impl<D: AsRef<[u8]>> Search for SubStrSearcher<D> {
336
336
let mut pos = 0 ;
337
337
loop {
338
338
if let Some ( i) = buf[ pos..] . iter ( ) . position ( |x| * x == b) {
339
- pos = i;
339
+ pos + = i;
340
340
} else {
341
341
return None ;
342
342
}
@@ -896,7 +896,7 @@ mod tests {
896
896
}
897
897
898
898
#[ test]
899
- fn test_split_iter ( ) {
899
+ fn test_split_iter_byte ( ) {
900
900
let searcher = b'/' . into_searcher ( ) ;
901
901
let buf = b"test/token/" ;
902
902
let mut iter = searcher. split ( buf) ;
@@ -906,6 +906,77 @@ mod tests {
906
906
assert_eq ! ( iter. next( ) , None ) ;
907
907
}
908
908
909
+ #[ test]
910
+ fn test_split_iter_substr ( ) {
911
+ let input = b"test/token/" ;
912
+
913
+ let searcher = SubStrSearcher :: new ( b"t/" ) ;
914
+ let mut iter = searcher. split ( input) ;
915
+ assert_eq ! ( iter. next( ) , Some ( & b"tes" [ ..] ) ) ;
916
+ assert_eq ! ( iter. next( ) , Some ( & b"token/" [ ..] ) ) ;
917
+ assert_eq ! ( iter. next( ) , None ) ;
918
+
919
+ let searcher = SubStrSearcher :: new ( b"/t" ) ;
920
+ let mut iter = searcher. split ( input) ;
921
+ assert_eq ! ( iter. next( ) , Some ( & b"test" [ ..] ) ) ;
922
+ assert_eq ! ( iter. next( ) , Some ( & b"oken/" [ ..] ) ) ;
923
+ assert_eq ! ( iter. next( ) , None ) ;
924
+ }
925
+
926
+ #[ test]
927
+ fn test_substr_search_l ( ) {
928
+ let input = b"test/token/" ;
929
+
930
+ let searcher = SubStrSearcher :: new ( b"t/" ) ;
931
+ assert_eq ! ( searcher. search_l( input, false ) , Some ( 3 ..5 ) ) ;
932
+ assert_eq ! ( searcher. search_l( input, true ) , Some ( 3 ..5 ) ) ;
933
+
934
+ let searcher = SubStrSearcher :: new ( b"/t" ) ;
935
+ assert_eq ! ( searcher. search_l( input, false ) , Some ( 4 ..6 ) ) ;
936
+ assert_eq ! ( searcher. search_l( input, true ) , Some ( 4 ..6 ) ) ;
937
+
938
+ let searcher = SubStrSearcher :: new ( b"n/" ) ;
939
+ assert_eq ! ( searcher. search_l( input, false ) , Some ( 9 ..11 ) ) ;
940
+ assert_eq ! ( searcher. search_l( input, true ) , Some ( 9 ..11 ) ) ;
941
+
942
+ let searcher = SubStrSearcher :: new ( b"te" ) ;
943
+ assert_eq ! ( searcher. search_l( input, false ) , Some ( 0 ..2 ) ) ;
944
+ assert_eq ! ( searcher. search_l( input, true ) , Some ( 0 ..2 ) ) ;
945
+
946
+ let searcher = SubStrSearcher :: new ( b"xt" ) ;
947
+ assert_eq ! ( searcher. search_l( input, false ) , None ) ;
948
+ assert_eq ! ( searcher. search_l( input, true ) , None ) ;
949
+
950
+ let searcher = SubStrSearcher :: new ( b"/x" ) ;
951
+ assert_eq ! ( searcher. search_l( input, false ) , None ) ;
952
+ assert_eq ! ( searcher. search_l( input, true ) , None ) ;
953
+ }
954
+
955
+ #[ test]
956
+ fn test_substr_search_r ( ) {
957
+ let input = b"test/token/" ;
958
+
959
+ let searcher = SubStrSearcher :: new ( b"t/" ) ;
960
+ assert_eq ! ( searcher. search_r( input, false ) , Some ( 3 ..5 ) ) ;
961
+ assert_eq ! ( searcher. search_r( input, true ) , Some ( 3 ..5 ) ) ;
962
+
963
+ let searcher = SubStrSearcher :: new ( b"/t" ) ;
964
+ assert_eq ! ( searcher. search_r( input, false ) , Some ( 4 ..6 ) ) ;
965
+ assert_eq ! ( searcher. search_r( input, true ) , Some ( 4 ..6 ) ) ;
966
+
967
+ let searcher = SubStrSearcher :: new ( b"n/" ) ;
968
+ assert_eq ! ( searcher. search_r( input, false ) , Some ( 9 ..11 ) ) ;
969
+ assert_eq ! ( searcher. search_r( input, true ) , Some ( 9 ..11 ) ) ;
970
+
971
+ let searcher = SubStrSearcher :: new ( b"te" ) ;
972
+ assert_eq ! ( searcher. search_r( input, false ) , Some ( 0 ..2 ) ) ;
973
+ assert_eq ! ( searcher. search_r( input, true ) , Some ( 0 ..2 ) ) ;
974
+
975
+ let searcher = SubStrSearcher :: new ( b"xt" ) ;
976
+ assert_eq ! ( searcher. search_r( input, false ) , None ) ;
977
+ assert_eq ! ( searcher. search_r( input, true ) , None ) ;
978
+ }
979
+
909
980
#[ test]
910
981
fn test_small_token ( ) {
911
982
let sf = Arc :: new ( SegmentBufFactory :: new ( 20 ) ) ;
0 commit comments