(deopt: &Deopt, is_rand_bench: bool)
| 132 | } |
| 133 | |
| 134 | fn collect_accumulation_coverage(deopt: &Deopt, is_rand_bench: bool) -> Result<()> { |
| 135 | let succ_seed_dir = deopt.get_library_succ_seed_dir()?; |
| 136 | let succ_seeds = prompt_fuzz::deopt::utils::read_sort_dir(&succ_seed_dir)?; |
| 137 | let mut last_seed_id = 0; |
| 138 | let mut last_seed_coverage = 0; |
| 139 | let mut counter = BranchCounter::new(deopt); |
| 140 | counter.init()?; |
| 141 | |
| 142 | let mut acc_coverage = Vec::new(); |
| 143 | for seed in succ_seeds.iter() { |
| 144 | let program = Program::load_from_path(seed)?; |
| 145 | counter.push(program.id)?; |
| 146 | let covered_branches = counter.count_branch()?; |
| 147 | log::info!("seed: {seed:?}, covered_branches: {covered_branches}"); |
| 148 | let mut should_infill = program.id - last_seed_id; |
| 149 | while should_infill > 1 { |
| 150 | acc_coverage.push(last_seed_coverage); |
| 151 | should_infill -= 1; |
| 152 | } |
| 153 | acc_coverage.push(covered_branches); |
| 154 | last_seed_id = program.id; |
| 155 | last_seed_coverage = covered_branches; |
| 156 | } |
| 157 | let save_file = get_acc_coverage_save_file(deopt)?; |
| 158 | let bench_file = if is_rand_bench { |
| 159 | get_acc_coverage_rand_bench_file(deopt)? |
| 160 | } else { |
| 161 | get_acc_coverage_bench_file(deopt)? |
| 162 | }; |
| 163 | |
| 164 | let dump_str = serde_json::to_string(&acc_coverage)?; |
| 165 | std::fs::write(save_file, &dump_str)?; |
| 166 | std::fs::write(&bench_file, dump_str)?; |
| 167 | log::info!("accumulation coverage is saved to: {bench_file:?}"); |
| 168 | Ok(()) |
| 169 | } |
| 170 | |
| 171 | fn plot_acc_coverage(deopt: &Deopt) -> Result<()> { |
| 172 | let acc_file = get_acc_coverage_save_file(deopt)?; |
no test coverage detected