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

Function eval_api_cov_map

src/program/infer/dynamic_infer.rs:244–274  ·  view source on GitHub ↗
(deopt: &Deopt)

Source from the content-addressed store, hash-verified

242}
243
244fn eval_api_cov_map(deopt: &Deopt) -> Result<APICovRank> {
245 let mut global_rank: APICovRank = APICovRank::new();
246 let seed_dir = deopt.get_library_succ_seed_dir()?;
247
248 for seed_path in crate::deopt::utils::read_sort_dir(&seed_dir)? {
249 let seed_program = Program::load_from_path(&seed_path)?;
250 let seed_id = seed_program.id;
251 let coverage_file = deopt.get_seed_coverage_file(seed_id)?;
252 if !coverage_file.exists() {
253 let executor = Executor::new(deopt)?;
254 executor.eval_seed_coverage(seed_id)?;
255 }
256 let coverage = deopt
257 .get_seed_coverage(seed_id)
258 .context("cannot find coverage file")?;
259 let mut observer = Observer::from_coverage(&coverage, deopt);
260 let api_coverage = observer.compute_library_api_coverage()?;
261 for (api, cov) in api_coverage {
262 if !seed_program.get_quality().library_calls.contains(api) {
263 continue;
264 }
265 let entry = global_rank.entry(api.to_string()).or_default();
266 entry.push((*cov, seed_id));
267 }
268 }
269 for value in global_rank.values_mut() {
270 value.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(std::cmp::Ordering::Less));
271 value.reverse();
272 }
273 Ok(global_rank)
274}
275
276/// Find a program that achieved the most coverage of an API.
277fn find_testbed_program(func: &str, deopt: &Deopt) -> Vec<usize> {

Callers 1

get_api_cov_mapFunction · 0.85

Calls 8

read_sort_dirFunction · 0.85
eval_seed_coverageMethod · 0.80
get_seed_coverageMethod · 0.80
get_qualityMethod · 0.80
pushMethod · 0.45

Tested by

no test coverage detected