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

Method compute_quality

src/program/mod.rs:162–195  ·  view source on GitHub ↗

Compute the quality of this generated program: - Diveristy: number of API calls. - Density: number of correlated API calls. - Coverage: covered APIs in prompt.

(&self, deopt: &Deopt)

Source from the content-addressed store, hash-verified

160 /// - Density: number of correlated API calls.
161 /// - Coverage: covered APIs in prompt.
162 pub fn compute_quality(&self, deopt: &Deopt) -> eyre::Result<Quality> {
163 let seed_path = deopt.get_succ_seed_path_by_id(self.id)?;
164 let ast = Executor::extract_ast(&seed_path, vec![], deopt)?;
165 let visitor = Visitor::new(ast.clone());
166
167 // compute diversity
168 let api_calls = visitor.get_library_call_names();
169 for call in api_calls.iter() {
170 if let Some(exec_count) = get_exec_counter_value(call) {
171 set_exec_counter_value(call.to_string(), exec_count + 1);
172 } else {
173 set_exec_counter_value(call.to_string(), 1);
174 }
175 }
176 save_exec_counter(deopt);
177 // parse critical calls
178 let cfg = crate::analysis::cfg::CFGBuilder::build_cfg(ast)?;
179 let critical_paths = cfg.visit_max_caller()?;
180 let critical_calls = if critical_paths.is_empty() {
181 vec![]
182 } else {
183 critical_paths[0].clone()
184 };
185 // compute density
186 let builder = crate::analysis::adg::ADGBuilder::new();
187 let adg = builder.sparse_build(cfg).context(format!(
188 "ADG build from program fialed:\n {}",
189 self.statements
190 ))?;
191 let density = adg.compute_density();
192
193 let quality = Quality::new(density, api_calls, critical_calls);
194 Ok(quality)
195 }
196
197 pub fn update_quality(
198 &mut self,

Callers 2

update_qualityMethod · 0.80
update_qualityMethod · 0.80

Calls 9

get_exec_counter_valueFunction · 0.85
set_exec_counter_valueFunction · 0.85
save_exec_counterFunction · 0.85
visit_max_callerMethod · 0.80
sparse_buildMethod · 0.80
compute_densityMethod · 0.80
is_emptyMethod · 0.45

Tested by

no test coverage detected