ps_ecc/polynomial/methods/
degree.rs1use crate::Polynomial;
2
3impl Polynomial {
4 #[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}