ps_ecc/polynomial/methods/
iter.rs1use crate::Polynomial;
2
3impl Polynomial {
4 pub fn iter(&self) -> std::slice::Iter<'_, u8> {
7 self.coefficients().iter()
8 }
9}
10
11#[cfg(test)]
12#[allow(clippy::expect_used)]
13mod tests {
14 use crate::Polynomial;
15
16 #[test]
17 fn iter_basic() {
18 let poly = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid polynomial");
19 let coeffs: Vec<u8> = poly.iter().copied().collect();
20
21 assert_eq!(coeffs, vec![1, 2, 3]);
22 }
23
24 #[test]
25 fn iter_in_for_loop() {
26 let poly = Polynomial::try_from(&[4u8, 5, 6][..]).expect("valid polynomial");
27 let mut sum = 0u8;
28
29 for &coef in &poly {
30 sum ^= coef;
31 }
32
33 assert_eq!(sum, 4 ^ 5 ^ 6);
34 }
35
36 #[test]
37 fn iter_empty_polynomial() {
38 let poly = Polynomial::default();
39 let coeffs: Vec<u8> = poly.iter().copied().collect();
40
41 assert_eq!(coeffs, vec![0]);
42 }
43
44 #[test]
45 fn iter_with_adapters() {
46 let poly = Polynomial::try_from(&[1u8, 2, 3, 4][..]).expect("valid polynomial");
47 let doubled: Vec<u8> = poly.iter().map(|&c| c.wrapping_mul(2)).collect();
48
49 assert_eq!(doubled, vec![2, 4, 6, 8]);
50 }
51
52 #[test]
53 fn iter_length_matches_degree_plus_one() {
54 let poly = Polynomial::try_from(&[1u8, 2, 3, 4, 5][..]).expect("valid polynomial");
55
56 assert_eq!(poly.iter().count(), 5);
57 assert_eq!(poly.iter().count(), poly.degree() as usize + 1);
58 }
59
60 #[test]
61 fn iter_max_degree() {
62 let coeffs = [1u8; 255];
63 let poly = Polynomial::try_from(&coeffs[..]).expect("valid polynomial");
64
65 assert_eq!(poly.iter().count(), 255);
66 }
67
68 #[test]
69 fn iter_sparse_polynomial() {
70 let poly = Polynomial::try_from(&[0u8, 0, 0, 1][..]).expect("valid polynomial");
71 let coeffs: Vec<u8> = poly.iter().copied().collect();
72
73 assert_eq!(coeffs, vec![0, 0, 0, 1]);
74 }
75
76 #[test]
77 fn iter_is_borrowing() {
78 let poly = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid polynomial");
79
80 let _ = poly.iter();
81 let _ = poly.iter();
82
83 assert_eq!(poly.degree(), 2);
84 }
85}