fix scheduler for storage changes
This commit is contained in:
parent
730fbcf6d4
commit
c013628017
@ -175,12 +175,14 @@ where
|
|||||||
fn next(&mut self, state: &mut Self::State) -> Result<CorpusId, Error> {
|
fn next(&mut self, state: &mut Self::State) -> Result<CorpusId, Error> {
|
||||||
let mut to_remove : Vec<(usize, f64)> = vec![];
|
let mut to_remove : Vec<(usize, f64)> = vec![];
|
||||||
let mut to_return : usize = 0;
|
let mut to_return : usize = 0;
|
||||||
let c = state.corpus().count();
|
let corpus_len = state.corpus().count();
|
||||||
|
let mut current_len = 0;
|
||||||
let gm = state.metadata_map_mut().get_mut::<GeneticMetadata>().expect("Corpus Scheduler empty");
|
let gm = state.metadata_map_mut().get_mut::<GeneticMetadata>().expect("Corpus Scheduler empty");
|
||||||
// println!("index: {} curr: {:?} next: {:?} gen: {} corp: {}", gm.current_cursor, gm.current_gen.len(), gm.next_gen.len(), gm.gen,
|
// println!("index: {} curr: {:?} next: {:?} gen: {} corp: {}", gm.current_cursor, gm.current_gen.len(), gm.next_gen.len(), gm.gen,
|
||||||
// c);
|
// c);
|
||||||
match gm.current_gen.get(gm.current_cursor) {
|
match gm.current_gen.get(gm.current_cursor) {
|
||||||
Some(c) => {
|
Some(c) => {
|
||||||
|
current_len = gm.current_gen.len();
|
||||||
gm.current_cursor+=1;
|
gm.current_cursor+=1;
|
||||||
// println!("normal next: {}", (*c).0);
|
// println!("normal next: {}", (*c).0);
|
||||||
return Ok((*c).0.into())
|
return Ok((*c).0.into())
|
||||||
@ -195,20 +197,26 @@ where
|
|||||||
to_remove.extend(d);
|
to_remove.extend(d);
|
||||||
// move all indices to the left, since all other indices will be deleted
|
// move all indices to the left, since all other indices will be deleted
|
||||||
gm.current_gen.sort_by(|a,b| a.0.cmp(&(*b).0)); // in order of the corpus index
|
gm.current_gen.sort_by(|a,b| a.0.cmp(&(*b).0)); // in order of the corpus index
|
||||||
for i in 0..gm.current_gen.len() {
|
// for i in 0..gm.current_gen.len() {
|
||||||
gm.current_gen[i] = (i, gm.current_gen[i].1);
|
// gm.current_gen[i] = (i, gm.current_gen[i].1);
|
||||||
}
|
// }
|
||||||
to_return = gm.current_gen.get(0).unwrap().0;
|
to_return = gm.current_gen.get(0).unwrap().0;
|
||||||
|
// assert_eq!(to_return, 0);
|
||||||
gm.current_cursor=1;
|
gm.current_cursor=1;
|
||||||
gm.gen+=1;
|
gm.gen+=1;
|
||||||
|
current_len = gm.current_gen.len();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// removing these elements will move all indices left by to_remove.len()
|
// removing these elements will move all indices left by to_remove.len()
|
||||||
to_remove.sort_by(|x,y| x.0.cmp(&(*y).0));
|
// to_remove.sort_by(|x,y| x.0.cmp(&(*y).0));
|
||||||
to_remove.reverse();
|
// to_remove.reverse();
|
||||||
|
let cm = state.corpus_mut();
|
||||||
|
assert_eq!(corpus_len-to_remove.len(), current_len);
|
||||||
|
assert_ne!(current_len,0);
|
||||||
for i in to_remove {
|
for i in to_remove {
|
||||||
state.corpus_mut().remove(i.0.into()).unwrap();
|
cm.remove(i.0.into()).unwrap();
|
||||||
}
|
}
|
||||||
|
assert_eq!(cm.get(to_return.into()).is_ok(),true);
|
||||||
// println!("switch next: {to_return}");
|
// println!("switch next: {to_return}");
|
||||||
return Ok(to_return.into());
|
return Ok(to_return.into());
|
||||||
}
|
}
|
||||||
@ -220,7 +228,7 @@ where
|
|||||||
idx: CorpusId
|
idx: CorpusId
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
// println!("On Add {idx}");
|
// println!("On Add {idx}");
|
||||||
let mut tc = state.corpus_mut().get(idx).unwrap().borrow_mut().clone();
|
let mut tc = state.corpus_mut().get(idx).expect("Newly added testcase not found by index").borrow_mut().clone();
|
||||||
let ff = MaxTimeFavFactor::compute(state, &mut tc).unwrap();
|
let ff = MaxTimeFavFactor::compute(state, &mut tc).unwrap();
|
||||||
if let Some(gm) = state.metadata_map_mut().get_mut::<GeneticMetadata>() {
|
if let Some(gm) = state.metadata_map_mut().get_mut::<GeneticMetadata>() {
|
||||||
gm.next_gen.push((idx.into(),ff));
|
gm.next_gen.push((idx.into(),ff));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user