use crate::{Eigenvalue, Eigenvector};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Eigenpair<T> {
value: Eigenvalue<T>,
vector: Eigenvector<T>,
}
impl<T> Eigenpair<T> {
#[must_use]
pub const fn new(value: Eigenvalue<T>, vector: Eigenvector<T>) -> Self {
Self { value, vector }
}
#[must_use]
pub const fn value(&self) -> &Eigenvalue<T> {
&self.value
}
#[must_use]
pub const fn vector(&self) -> &Eigenvector<T> {
&self.vector
}
#[must_use]
pub fn into_inner(self) -> (Eigenvalue<T>, Eigenvector<T>) {
(self.value, self.vector)
}
}
#[cfg(test)]
mod tests {
use super::Eigenpair;
use crate::{Eigenvalue, Eigenvector};
#[test]
fn pairs_an_eigenvalue_with_an_eigenvector() {
let pair = Eigenpair::new(
Eigenvalue::new(3_i32),
Eigenvector::new(vec![1_i32, 0]).expect("valid eigenvector"),
);
assert_eq!(*pair.value().as_ref(), 3);
assert_eq!(pair.vector().coordinates(), &[1, 0]);
}
}