use crate::Vector;
#[derive(Debug, Clone, PartialEq)]
pub struct Solution {
x: Vector,
residual: Option<Vector>,
}
impl Solution {
pub fn new(x: Vector, residual: Option<Vector>) -> Self {
Self { x, residual }
}
pub fn x(&self) -> &[f64] {
&self.x
}
pub fn residual(&self) -> Option<&[f64]> {
self.residual.as_deref()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn with_residual() {
let sol = Solution::new(vec![1.0, 2.0], Some(vec![0.1, -0.2]));
assert_eq!(sol.x(), &[1.0, 2.0]);
assert_eq!(sol.residual(), Some(&[0.1, -0.2][..]));
}
#[test]
fn without_residual() {
let sol = Solution::new(vec![3.0], None);
assert_eq!(sol.x(), &[3.0]);
assert!(sol.residual().is_none());
}
#[test]
fn clone_and_eq() {
let a = Solution::new(vec![1.0], Some(vec![0.0]));
assert_eq!(a, a.clone());
}
}