Skip to main content

ps_ecc/polynomial/implementations/
as_ref.rs

1use crate::Polynomial;
2
3impl AsRef<[u8]> for Polynomial {
4    fn as_ref(&self) -> &[u8] {
5        self.coefficients()
6    }
7}
8
9#[cfg(test)]
10#[allow(clippy::expect_used)]
11mod tests {
12    use crate::Polynomial;
13
14    #[test]
15    fn as_ref_returns_coefficients() {
16        let p = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid polynomial");
17
18        let slice: &[u8] = p.as_ref();
19
20        assert_eq!(slice, &[1, 2, 3]);
21    }
22
23    #[test]
24    fn as_ref_zero_polynomial() {
25        let p = Polynomial::default();
26
27        let slice: &[u8] = p.as_ref();
28
29        assert_eq!(slice, &[0]);
30    }
31
32    #[test]
33    fn as_ref_returns_trimmed_slice() {
34        // Input has trailing zeros, but coefficients() returns trimmed slice
35        let p = Polynomial::try_from(&[1u8, 2, 3, 0, 0][..]).expect("valid polynomial");
36
37        let slice: &[u8] = p.as_ref();
38
39        assert_eq!(slice, &[1, 2, 3]);
40    }
41
42    #[test]
43    fn as_ref_works_with_generic_fn() {
44        fn takes_as_ref(x: impl AsRef<[u8]>) -> usize {
45            x.as_ref().len()
46        }
47
48        let p = Polynomial::try_from(&[1u8, 2, 3, 4, 5][..]).expect("valid polynomial");
49
50        assert_eq!(takes_as_ref(p), 5);
51    }
52}