ps_ecc/polynomial/implementations/
add_assign.rs1use std::ops::{AddAssign, BitXorAssign};
2
3use crate::Polynomial;
4
5impl AddAssign for Polynomial {
6 fn add_assign(&mut self, rhs: Self) {
7 BitXorAssign::bitxor_assign(self, rhs);
8 }
9}
10
11impl AddAssign<&Self> for Polynomial {
12 fn add_assign(&mut self, rhs: &Self) {
13 BitXorAssign::bitxor_assign(self, rhs);
14 }
15}
16
17#[cfg(test)]
18#[allow(clippy::expect_used)]
19mod tests {
20 use crate::Polynomial;
21
22 #[test]
23 fn add_assign_basic() {
24 let mut a = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid polynomial");
25 let b = Polynomial::try_from(&[4u8, 5, 6][..]).expect("valid polynomial");
26
27 a += b;
28
29 assert_eq!(a.coefficients(), &[1 ^ 4, 2 ^ 5, 3 ^ 6]);
30 }
31
32 #[test]
33 fn add_assign_different_degrees() {
34 let mut a = Polynomial::try_from(&[1u8, 2][..]).expect("valid polynomial");
35 let b = Polynomial::try_from(&[3u8, 4, 5, 6][..]).expect("valid polynomial");
36
37 a += b;
38
39 assert_eq!(a.coefficients(), &[1 ^ 3, 2 ^ 4, 5, 6]);
40 }
41
42 #[test]
43 fn add_assign_cancels_to_zero() {
44 let mut a = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid polynomial");
45 let b = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid polynomial");
46
47 a += b;
48
49 assert_eq!(a.degree(), 0);
50 assert_eq!(a.coefficients(), &[0]);
51 }
52
53 #[test]
54 fn add_assign_with_reference() {
55 let mut a = Polynomial::try_from(&[1u8, 2, 3][..]).expect("valid polynomial");
56 let b = Polynomial::try_from(&[4u8, 5, 6][..]).expect("valid polynomial");
57
58 a += &b;
59
60 assert_eq!(a.coefficients(), &[1 ^ 4, 2 ^ 5, 3 ^ 6]);
61 }
62
63 #[test]
64 fn add_assign_multiple() {
65 let mut a = Polynomial::try_from(&[1u8][..]).expect("valid polynomial");
66 let b = Polynomial::try_from(&[2u8][..]).expect("valid polynomial");
67 let c = Polynomial::try_from(&[4u8][..]).expect("valid polynomial");
68
69 a += b;
70 a += c;
71
72 assert_eq!(a.coefficients(), &[1 ^ 2 ^ 4]);
73 }
74}