1use crate::{Eigenvalue, Eigenvector};
2
3#[derive(Debug, Clone, PartialEq, Eq)]
5pub struct Eigenpair<T> {
6 value: Eigenvalue<T>,
7 vector: Eigenvector<T>,
8}
9
10impl<T> Eigenpair<T> {
11 #[must_use]
13 pub const fn new(value: Eigenvalue<T>, vector: Eigenvector<T>) -> Self {
14 Self { value, vector }
15 }
16
17 #[must_use]
19 pub const fn value(&self) -> &Eigenvalue<T> {
20 &self.value
21 }
22
23 #[must_use]
25 pub const fn vector(&self) -> &Eigenvector<T> {
26 &self.vector
27 }
28
29 #[must_use]
31 pub fn into_inner(self) -> (Eigenvalue<T>, Eigenvector<T>) {
32 (self.value, self.vector)
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use super::Eigenpair;
39 use crate::{Eigenvalue, Eigenvector};
40
41 #[test]
42 fn pairs_an_eigenvalue_with_an_eigenvector() {
43 let pair = Eigenpair::new(
44 Eigenvalue::new(3_i32),
45 Eigenvector::new(vec![1_i32, 0]).expect("valid eigenvector"),
46 );
47
48 assert_eq!(*pair.value().as_ref(), 3);
49 assert_eq!(pair.vector().coordinates(), &[1, 0]);
50 }
51}