diff --git a/fuzzers/FRET/src/systemstate/schedulers.rs b/fuzzers/FRET/src/systemstate/schedulers.rs index e9c0e20759..cd28eb5424 100644 --- a/fuzzers/FRET/src/systemstate/schedulers.rs +++ b/fuzzers/FRET/src/systemstate/schedulers.rs @@ -175,12 +175,14 @@ where fn next(&mut self, state: &mut Self::State) -> Result { let mut to_remove : Vec<(usize, f64)> = vec![]; 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::().expect("Corpus Scheduler empty"); // println!("index: {} curr: {:?} next: {:?} gen: {} corp: {}", gm.current_cursor, gm.current_gen.len(), gm.next_gen.len(), gm.gen, // c); match gm.current_gen.get(gm.current_cursor) { Some(c) => { + current_len = gm.current_gen.len(); gm.current_cursor+=1; // println!("normal next: {}", (*c).0); return Ok((*c).0.into()) @@ -195,20 +197,26 @@ where to_remove.extend(d); // 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 - for i in 0..gm.current_gen.len() { - gm.current_gen[i] = (i, gm.current_gen[i].1); - } + // for i in 0..gm.current_gen.len() { + // gm.current_gen[i] = (i, gm.current_gen[i].1); + // } to_return = gm.current_gen.get(0).unwrap().0; + // assert_eq!(to_return, 0); gm.current_cursor=1; gm.gen+=1; + current_len = gm.current_gen.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.reverse(); + // to_remove.sort_by(|x,y| x.0.cmp(&(*y).0)); + // 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 { - 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}"); return Ok(to_return.into()); } @@ -220,7 +228,7 @@ where idx: CorpusId ) -> Result<(), Error> { // 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(); if let Some(gm) = state.metadata_map_mut().get_mut::() { gm.next_gen.push((idx.into(),ff));