MCPcopy Create free account
hub / github.com/FuzzAnything/PromptFuzz / minimize

Function minimize

src/minimize.rs:7–44  ·  view source on GitHub ↗

Minimize seed programs by unique branches

(deopt: &Deopt)

Source from the content-addressed store, hash-verified

5
6/// Minimize seed programs by unique branches
7pub fn minimize(deopt: &Deopt) -> Result<()> {
8 let seeds_dir = deopt.get_library_succ_seed_dir()?;
9 // first sort seeds by coverge.
10 let mut program_coverage: Vec<(PathBuf, f32)> = Vec::new();
11 for file in crate::deopt::utils::read_sort_dir(&seeds_dir)? {
12 let program = Program::load_from_path(&file)?;
13 let coverage_rate = Observer::compute_coverage_for_program(program.id, deopt)?;
14 program_coverage.push((file, coverage_rate));
15 }
16 program_coverage.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap());
17
18 // iterate the sorted seeds, only the seeds still triger unique branch(s) are retained.
19 let mut observer = Observer::new(deopt);
20 for (program_path, _) in program_coverage {
21 let program = Program::load_from_path(&program_path)?;
22 let seed = deopt.get_seed_path_by_id(program.id)?;
23 let coverage = deopt.get_seed_coverage(program.id)?;
24 let unique_branches = observer.has_unique_branch(&coverage);
25 if unique_branches.is_empty() {
26 if seed.exists() {
27 log::info!(
28 "Program Seed triggers no unique branch and has been removed: {program_path:?}"
29 );
30 std::fs::remove_file(seed)?;
31 }
32 continue;
33 }
34 log::info!("{program_path:?} is an unique seed");
35 if !seed.exists() {
36 std::fs::copy(program_path, seed)?;
37 }
38 let new_exp_branches = observer.has_new_branch(&coverage);
39 observer.merge_new_branch(&new_exp_branches);
40 }
41
42 log::info!("{}", observer.dump_global_states());
43 Ok(())
44}

Callers 2

fuzz_loopMethod · 0.85
mainFunction · 0.85

Calls 9

read_sort_dirFunction · 0.85
get_seed_path_by_idMethod · 0.80
get_seed_coverageMethod · 0.80
has_unique_branchMethod · 0.80
has_new_branchMethod · 0.80
merge_new_branchMethod · 0.80
pushMethod · 0.45
is_emptyMethod · 0.45

Tested by

no test coverage detected