ps_ecc/polynomial/implementations/
partial_eq.rs1use crate::Polynomial;
2
3impl PartialEq for Polynomial {
4 fn eq(&self, other: &Self) -> bool {
5 if self.degree != other.degree {
6 return false;
7 }
8
9 let len = self.degree as usize + 1;
10
11 self.coefficients[..len] == other.coefficients[..len]
12 }
13}
14
15#[cfg(test)]
16#[allow(clippy::expect_used)]
17mod tests {
18 use crate::Polynomial;
19
20 #[test]
21 fn equal_polynomials() {
22 let a = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid");
23 let b = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid");
24
25 assert_eq!(a, b);
26 }
27
28 #[test]
29 fn different_degrees_not_equal() {
30 let a = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid");
31 let b = Polynomial::try_from(&[1u8, 2][..]).expect("valid");
32
33 assert_ne!(a, b);
34 }
35
36 #[test]
37 fn same_degree_different_coefficients() {
38 let a = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid");
39 let b = Polynomial::try_from(&[1u8, 2, 4][..]).expect("valid");
40
41 assert_ne!(a, b);
42 }
43
44 #[test]
45 fn zero_polynomials_equal() {
46 let a = Polynomial::default();
47 let b = Polynomial::default();
48
49 assert_eq!(a, b);
50 }
51
52 #[test]
53 fn zero_vs_nonzero_not_equal() {
54 let a = Polynomial::default();
55 let b = Polynomial::try_from(&[1u8][..]).expect("valid");
56
57 assert_ne!(a, b);
58 }
59
60 #[test]
61 fn reflexive() {
62 let p = Polynomial::try_from(&[5u8, 10, 15][..]).expect("valid");
63
64 assert_eq!(p, p);
65 }
66
67 #[test]
68 fn symmetric() {
69 let a = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid");
70 let b = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid");
71
72 assert_eq!(a == b, b == a);
73 }
74
75 #[test]
76 fn transitive() {
77 let a = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid");
78 let b = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid");
79 let c = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid");
80
81 assert!(a == b && b == c && a == c);
82 }
83
84 #[test]
85 fn trailing_zeros_trimmed_equal() {
86 let a = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid");
87 let b = Polynomial::try_from(&[1u8, 2, 3, 0, 0][..]).expect("valid");
88
89 assert_eq!(a, b);
90 }
91
92 #[test]
93 fn only_compares_relevant_coefficients() {
94 let mut a = Polynomial::default();
95 let mut b = Polynomial::default();
96
97 a.set(0, 1);
98 b.set(0, 1);
99
100 assert_eq!(a, b);
105 }
106}