Skip to main content

ps_ecc/polynomial/methods/
degree.rs

1use crate::Polynomial;
2
3impl Polynomial {
4    /// Returns the degree of this polynomial.
5    ///
6    /// The zero polynomial has degree 0 by this definition.
7    #[must_use]
8    pub const fn degree(&self) -> u8 {
9        self.degree
10    }
11}
12
13#[cfg(test)]
14mod tests {
15    use crate::Polynomial;
16
17    #[test]
18    fn zero_polynomial() {
19        let p = Polynomial::default();
20
21        assert_eq!(p.degree(), 0);
22    }
23
24    #[test]
25    fn constant_polynomial() {
26        let mut p = Polynomial::default();
27
28        p.set(0, 42);
29
30        assert_eq!(p.degree(), 0);
31    }
32
33    #[test]
34    fn linear() {
35        let mut p = Polynomial::default();
36
37        p.set(1, 1);
38
39        assert_eq!(p.degree(), 1);
40    }
41
42    #[test]
43    fn quadratic() {
44        let mut p = Polynomial::default();
45
46        p.set(2, 1);
47
48        assert_eq!(p.degree(), 2);
49    }
50
51    #[test]
52    fn max_degree() {
53        let mut p = Polynomial::default();
54
55        p.set(254, 1);
56
57        assert_eq!(p.degree(), 254);
58    }
59
60    #[test]
61    fn degree_after_trim() {
62        let mut p = Polynomial::default();
63
64        p.set(4, 1);
65        p.set(4, 0);
66
67        assert_eq!(p.degree(), 0);
68    }
69
70    #[test]
71    fn degree_after_partial_trim() {
72        let mut p = Polynomial::default();
73
74        p.set(2, 5);
75        p.set(5, 3);
76        p.set(5, 0);
77
78        assert_eq!(p.degree(), 2);
79    }
80
81    #[test]
82    fn degree_increases() {
83        let mut p = Polynomial::default();
84
85        p.set(1, 1);
86
87        assert_eq!(p.degree(), 1);
88
89        p.set(3, 1);
90
91        assert_eq!(p.degree(), 3);
92
93        p.set(7, 1);
94
95        assert_eq!(p.degree(), 7);
96    }
97
98    #[test]
99    fn degree_unaffected_by_lower_sets() {
100        let mut p = Polynomial::default();
101
102        p.set(5, 1);
103        p.set(2, 9);
104        p.set(0, 3);
105
106        assert_eq!(p.degree(), 5);
107    }
108
109    #[test]
110    fn degree_with_sparse_coefficients() {
111        let mut p = Polynomial::default();
112
113        p.set(0, 1);
114        p.set(10, 1);
115        p.set(5, 0);
116
117        assert_eq!(p.degree(), 10);
118    }
119}