Recompute the global branch coverage according current seed programs. typicall called after Fuzzer::Executor::recheck_seeds();
(&mut self)
| 243 | // Recompute the global branch coverage according current seed programs. |
| 244 | // typicall called after Fuzzer::Executor::recheck_seeds(); |
| 245 | pub fn recompute_global_coverage(&mut self) -> Result<()> { |
| 246 | log::info!( |
| 247 | "Recompute the global branch coverage! \n Previous: {}", |
| 248 | self.dump_global_states() |
| 249 | ); |
| 250 | self.clear_global_branches(); |
| 251 | |
| 252 | let seed_dir = self.deopt.get_library_seed_dir()?; |
| 253 | for seed in read_sort_dir(&seed_dir)? { |
| 254 | let mut program = Program::load_from_path(&seed)?; |
| 255 | let coverage = self.deopt.get_seed_coverage(program.id)?; |
| 256 | let unique_branches = self.has_unique_branch(&coverage); |
| 257 | if !unique_branches.is_empty() { |
| 258 | program.set_unique_branches(unique_branches); |
| 259 | self.merge_coverage(&coverage); |
| 260 | // update the quality |
| 261 | self.deopt.save_program(&program)?; |
| 262 | } |
| 263 | } |
| 264 | log::info!("Recompute finished. Current: {}", self.dump_global_states()); |
| 265 | Ok(()) |
| 266 | } |
| 267 | } |
| 268 | |
| 269 | #[cfg(test)] |
no test coverage detected