diff --git a/instant-segment/src/lib.rs b/instant-segment/src/lib.rs index cb27cd1..df9e4f6 100644 --- a/instant-segment/src/lib.rs +++ b/instant-segment/src/lib.rs @@ -62,7 +62,11 @@ impl Segmenter { input: &str, search: &'a mut Search, ) -> Result + ExactSizeIterator, InvalidCharacter> { - SegmentState::new(Ascii::new(input)?, self, search).run(); + let state = SegmentState::new(Ascii::new(input)?, self, search); + if !input.is_empty() { + state.run(); + } + Ok(search.result.iter().map(|v| v.as_str())) } diff --git a/instant-segment/src/test_cases.rs b/instant-segment/src/test_cases.rs index 41ab0eb..8fbf207 100644 --- a/instant-segment/src/test_cases.rs +++ b/instant-segment/src/test_cases.rs @@ -3,6 +3,8 @@ use crate::{Search, Segmenter}; /// Run a segmenter against the built-in test cases pub fn run(segmenter: &Segmenter) { let mut search = Search::default(); + assert_eq!(segmenter.segment("", &mut search).unwrap().len(), 0); + let mut success = true; for test in TEST_CASES.iter().copied() { success &= assert_segments(test, &mut search, segmenter);