From b9a5490325f038cf7f8f3a5bdc8c7e06f4df3864 Mon Sep 17 00:00:00 2001 From: Sander Hautvast Date: Tue, 10 May 2022 17:55:47 +0200 Subject: [PATCH] added first bugfix --- src/test.rs | 18 +++++++++++++----- src/util/mod.rs | 10 ++++++++-- src/util/ngrams.rs | 2 +- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/test.rs b/src/test.rs index 3a672b3..9150a0d 100644 --- a/src/test.rs +++ b/src/test.rs @@ -7,12 +7,20 @@ pub fn should_be_equal_lists<'a>(left: impl Iterator, right: V } pub fn should_be_equal_list_of_lists<'a>(actual: &mut impl Iterator>, expected: Vec>) { - let mut actual_vec=Vec::new(); - actual_vec.extend(actual); - assert_eq!(actual_vec.len(), expected.len()); - for (actual_outer, expected_outer) in actual_vec.into_iter().zip(expected.into_iter()) { - for (actual_inner, expected_inner) in actual_outer.zip(expected_outer) { + let actual = collect(actual); + assert_eq!(actual.len(), expected.len()); + for (actual_outer, expected_outer) in actual.into_iter().zip(expected.into_iter()) { + let actual_outer: Vec<&&str> = actual_outer.collect(); + let expected_outer: Vec<&&str> = expected_outer.collect(); + assert_eq!(actual_outer.len(), expected_outer.len()); + for (actual_inner, expected_inner) in actual_outer.iter().zip(expected_outer.iter()) { assert_eq!(actual_inner, expected_inner); } } +} + +fn collect<'a>(iter: &mut impl Iterator>) -> Vec> { + let mut vec = Vec::new(); + vec.extend(iter); + vec } \ No newline at end of file diff --git a/src/util/mod.rs b/src/util/mod.rs index c1ceb9d..aa33196 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -172,7 +172,8 @@ mod tests { let gram4 = vec!["b", "c"]; let gram5 = vec!["c"]; let gram6 = vec!["c", "d"]; - let expected = vec![gram1.iter(), gram2.iter(), gram3.iter(), gram4.iter(), gram5.iter(), gram6.iter()]; + let gram7 = vec!["d"]; + let expected = vec![gram1.iter(), gram2.iter(), gram3.iter(), gram4.iter(), gram5.iter(), gram6.iter(), gram7.iter()]; should_be_equal_list_of_lists(&mut bigrams, expected); } @@ -181,6 +182,7 @@ mod tests { fn test_everygrams_n_eq_3() { let sequence = vec!["a", "b", "c", "d", "e"]; let mut bigrams = everygrams(sequence.iter(), 3); + let gram1 = vec!["a"]; let gram2 = vec!["a", "b"]; let gram3 = vec!["a", "b", "c"]; @@ -190,7 +192,11 @@ mod tests { let gram7 = vec!["c"]; let gram8 = vec!["c", "d"]; let gram9 = vec!["c", "d", "e"]; - let expected = vec![gram1.iter(), gram2.iter(), gram3.iter(), gram4.iter(), gram5.iter(), gram6.iter(), gram7.iter(), gram8.iter(), gram9.iter()]; + let gram10 = vec!["d"]; + let gram11 = vec!["d", "e"]; + let gram12 = vec!["e"]; + + let expected = vec![gram1.iter(), gram2.iter(), gram3.iter(), gram4.iter(), gram5.iter(), gram6.iter(), gram7.iter(), gram8.iter(), gram9.iter(), gram10.iter(), gram11.iter(), gram12.iter()]; should_be_equal_list_of_lists(&mut bigrams, expected); } diff --git a/src/util/ngrams.rs b/src/util/ngrams.rs index e4d6ddc..e0a2327 100644 --- a/src/util/ngrams.rs +++ b/src/util/ngrams.rs @@ -83,7 +83,7 @@ impl<'a> Iterator for EveryGramSequenceIter<'a> { if maybe_next.is_some() { self.current_ngram.push(&maybe_next.unwrap()); } else { - self.n = 0; // not pretty, but ensures that the following next will be the last + self.n -= 1; // not pretty, but ensures correct ending if self.current_ngram.len() == 0 { return None; }