in resctl-bench/src/bench/iocost_tune.rs [1801:1838]
fn format_solutions<'a>(&self, out: &mut Box<dyn Write + 'a>, res: &IoCostTuneResult) {
if self.rules.len() == 0 {
return;
}
write!(out, "{}\n", &double_underline("Solutions")).unwrap();
let mut rules: Vec<&QoSRule> = vec![];
let mut prev_sol: Option<&QoSSolution> = None;
let mut flush = |rules: &mut Vec<&QoSRule>, prev_sol: Option<&QoSSolution>| {
if rules.len() > 0 {
Self::format_rules(out, &rules);
match prev_sol {
Some(prev_sol) => Self::format_one_solution(out, prev_sol, &res.isol_pct),
None => writeln!(out, " NO SOLUTION").unwrap(),
}
writeln!(out, "").unwrap();
rules.clear();
}
};
for rule in self.rules.iter() {
let sol = res.solutions.get(&rule.name);
if !rules.is_empty()
&& !(sol.is_none() && prev_sol.is_none())
&& !((sol.is_some() && prev_sol.is_some())
&& sol
.as_ref()
.unwrap()
.equal_sans_target(prev_sol.as_ref().unwrap()))
{
flush(&mut rules, prev_sol);
}
rules.push(rule);
prev_sol = sol;
}
flush(&mut rules, prev_sol);
}