1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
3pub struct Eigenvalue<T> {
4 value: T,
5}
6
7impl<T> Eigenvalue<T> {
8 #[must_use]
10 pub const fn new(value: T) -> Self {
11 Self { value }
12 }
13
14 #[must_use]
16 pub const fn from_value(value: T) -> Self {
17 Self::new(value)
18 }
19
20 #[must_use]
22 pub const fn as_ref(&self) -> &T {
23 &self.value
24 }
25
26 #[must_use]
28 pub fn into_inner(self) -> T {
29 self.value
30 }
31}
32
33impl<T> AsRef<T> for Eigenvalue<T> {
34 fn as_ref(&self) -> &T {
35 self.as_ref()
36 }
37}
38
39#[cfg(test)]
40mod tests {
41 use super::Eigenvalue;
42
43 #[test]
44 fn constructs_and_exposes_an_eigenvalue() {
45 let value = Eigenvalue::from_value(7_i32);
46
47 assert_eq!(*value.as_ref(), 7);
48 assert_eq!(value.into_inner(), 7);
49 }
50}