added first bugfix

This commit is contained in:
Sander Hautvast 2022-05-10 17:55:47 +02:00
parent c668a2ac69
commit b9a5490325
3 changed files with 22 additions and 8 deletions

View file

@ -7,12 +7,20 @@ pub fn should_be_equal_lists<'a>(left: impl Iterator<Item=&'a &'a str>, right: V
} }
pub fn should_be_equal_list_of_lists<'a>(actual: &mut impl Iterator<Item=impl Iterator<Item=&'a &'a str>>, expected: Vec<Iter<&'a str>>) { pub fn should_be_equal_list_of_lists<'a>(actual: &mut impl Iterator<Item=impl Iterator<Item=&'a &'a str>>, expected: Vec<Iter<&'a str>>) {
let mut actual_vec=Vec::new(); let actual = collect(actual);
actual_vec.extend(actual); assert_eq!(actual.len(), expected.len());
assert_eq!(actual_vec.len(), expected.len()); for (actual_outer, expected_outer) in actual.into_iter().zip(expected.into_iter()) {
for (actual_outer, expected_outer) in actual_vec.into_iter().zip(expected.into_iter()) { let actual_outer: Vec<&&str> = actual_outer.collect();
for (actual_inner, expected_inner) in actual_outer.zip(expected_outer) { 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); assert_eq!(actual_inner, expected_inner);
} }
} }
}
fn collect<'a>(iter: &mut impl Iterator<Item=impl Iterator<Item=&'a &'a str>>) -> Vec<impl Iterator<Item=&'a &'a str>> {
let mut vec = Vec::new();
vec.extend(iter);
vec
} }

View file

@ -172,7 +172,8 @@ mod tests {
let gram4 = vec!["b", "c"]; let gram4 = vec!["b", "c"];
let gram5 = vec!["c"]; let gram5 = vec!["c"];
let gram6 = vec!["c", "d"]; 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); should_be_equal_list_of_lists(&mut bigrams, expected);
} }
@ -181,6 +182,7 @@ mod tests {
fn test_everygrams_n_eq_3() { fn test_everygrams_n_eq_3() {
let sequence = vec!["a", "b", "c", "d", "e"]; let sequence = vec!["a", "b", "c", "d", "e"];
let mut bigrams = everygrams(sequence.iter(), 3); let mut bigrams = everygrams(sequence.iter(), 3);
let gram1 = vec!["a"]; let gram1 = vec!["a"];
let gram2 = vec!["a", "b"]; let gram2 = vec!["a", "b"];
let gram3 = vec!["a", "b", "c"]; let gram3 = vec!["a", "b", "c"];
@ -190,7 +192,11 @@ mod tests {
let gram7 = vec!["c"]; let gram7 = vec!["c"];
let gram8 = vec!["c", "d"]; let gram8 = vec!["c", "d"];
let gram9 = vec!["c", "d", "e"]; 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); should_be_equal_list_of_lists(&mut bigrams, expected);
} }

View file

@ -83,7 +83,7 @@ impl<'a> Iterator for EveryGramSequenceIter<'a> {
if maybe_next.is_some() { if maybe_next.is_some() {
self.current_ngram.push(&maybe_next.unwrap()); self.current_ngram.push(&maybe_next.unwrap());
} else { } 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 { if self.current_ngram.len() == 0 {
return None; return None;
} }