diff options
| author | Alexis Bourget <alexis.bourget@gmail.com> | 2021-07-11 17:47:57 +0200 |
|---|---|---|
| committer | Alexis Bourget <alexis.bourget@gmail.com> | 2021-07-11 17:47:57 +0200 |
| commit | cd04731d3a6d86f4f9bfb2ff8fa6bf0179a379f8 (patch) | |
| tree | 2d121351cc681884da6e08aa15089b2b185c3a3c | |
| parent | 101a146db994f61d6ef489ebb8ad8d506e1159cd (diff) | |
| download | rust-cd04731d3a6d86f4f9bfb2ff8fa6bf0179a379f8.tar.gz rust-cd04731d3a6d86f4f9bfb2ff8fa6bf0179a379f8.zip | |
Add test for the fix
| -rw-r--r-- | library/alloc/tests/str.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/library/alloc/tests/str.rs b/library/alloc/tests/str.rs index a1e819cf8f9..d3a87c056cf 100644 --- a/library/alloc/tests/str.rs +++ b/library/alloc/tests/str.rs @@ -1873,6 +1873,47 @@ mod pattern { "* \t", [Reject(0, 1), Reject(1, 2), Reject(2, 3),] ); + + // See #85462 + #[test] + fn str_searcher_empty_needle_after_done() { + // Empty needle and haystack + { + let mut searcher = "".into_searcher(""); + + assert_eq!(searcher.next(), SearchStep::Match(0, 0)); + assert_eq!(searcher.next(), SearchStep::Done); + assert_eq!(searcher.next(), SearchStep::Done); + assert_eq!(searcher.next(), SearchStep::Done); + + let mut searcher = "".into_searcher(""); + + assert_eq!(searcher.next_back(), SearchStep::Match(0, 0)); + assert_eq!(searcher.next_back(), SearchStep::Done); + assert_eq!(searcher.next_back(), SearchStep::Done); + assert_eq!(searcher.next_back(), SearchStep::Done); + } + // Empty needle and non-empty haystack + { + let mut searcher = "".into_searcher("a"); + + assert_eq!(searcher.next(), SearchStep::Match(0, 0)); + assert_eq!(searcher.next(), SearchStep::Reject(0, 1)); + assert_eq!(searcher.next(), SearchStep::Match(1, 1)); + assert_eq!(searcher.next(), SearchStep::Done); + assert_eq!(searcher.next(), SearchStep::Done); + assert_eq!(searcher.next(), SearchStep::Done); + + let mut searcher = "".into_searcher("a"); + + assert_eq!(searcher.next_back(), SearchStep::Match(1, 1)); + assert_eq!(searcher.next_back(), SearchStep::Reject(0, 1)); + assert_eq!(searcher.next_back(), SearchStep::Match(0, 0)); + assert_eq!(searcher.next_back(), SearchStep::Done); + assert_eq!(searcher.next_back(), SearchStep::Done); + assert_eq!(searcher.next_back(), SearchStep::Done); + } + } } macro_rules! generate_iterator_test { |
