use std::fmt;
#[derive(Clone, Copy, Debug)]
pub struct Bracket {
pub a: f64,
pub b: f64,
pub fa: f64,
pub fb: f64,
pub xo: f64,
pub fxo: f64,
}
impl fmt::Display for Bracket {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"lower bound: a = {}\n\
root/optimum: xo = {}\n\
upper bound: b = {}\n\
function @ a: f(a) = {}\n\
function @ root/optimum: f(xo) = {}\n\
function @ b: f(b) = {}",
self.a, self.xo, self.b, self.fa, self.fxo, self.fb
)
.unwrap();
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::Bracket;
#[test]
fn bracket_display_works() {
let bracket = Bracket {
a: 1.0,
xo: 2.0,
b: 3.0,
fa: 4.0,
fxo: 5.0,
fb: 6.0,
};
assert_eq!(
format!("{}", bracket),
"lower bound: a = 1\n\
root/optimum: xo = 2\n\
upper bound: b = 3\n\
function @ a: f(a) = 4\n\
function @ root/optimum: f(xo) = 5\n\
function @ b: f(b) = 6",
);
}
}