Skip to main content

ps_ecc/polynomial/implementations/index/
usize.rs

1use std::ops::Index;
2
3use crate::Polynomial;
4
5impl Index<usize> for Polynomial {
6    type Output = u8;
7
8    fn index(&self, index: usize) -> &Self::Output {
9        self.coefficients.get(index).unwrap_or(&0)
10    }
11}
12
13#[cfg(test)]
14#[allow(clippy::expect_used)]
15mod tests {
16    use crate::Polynomial;
17
18    #[test]
19    fn index_usize_within_bounds() {
20        let p = Polynomial::from_slice(&[3, 7, 0, 5]).expect("valid polynomial");
21
22        assert_eq!(p[0usize], 3);
23        assert_eq!(p[1usize], 7);
24        assert_eq!(p[2usize], 0);
25        assert_eq!(p[3usize], 5);
26    }
27
28    #[test]
29    fn index_usize_out_of_bounds_returns_zero() {
30        let p = Polynomial::from_slice(&[1, 2]).expect("valid polynomial");
31
32        assert_eq!(p[2usize], 0);
33        assert_eq!(p[100usize], 0);
34    }
35
36    #[test]
37    fn index_usize_empty_polynomial() {
38        let p = Polynomial::from_slice(&[]).expect("valid polynomial");
39
40        assert_eq!(p[0usize], 0);
41    }
42}