added first bugfix
This commit is contained in:
parent
c668a2ac69
commit
b9a5490325
3 changed files with 22 additions and 8 deletions
18
src/test.rs
18
src/test.rs
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue