Scalar addition of BigDigit to BigUint
A BigDigit can be added to a BigUint - this is one of several operations being implemented to allow scalar operations on BigInt and BigUint across the board.
This commit is contained in:
parent
e520bdad0d
commit
a2a28c682e
|
@ -394,6 +394,23 @@ impl<'a> Add<&'a BigUint> for BigUint {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Add<BigDigit> for BigUint {
|
||||||
|
type Output = BigUint;
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn add(mut self, other: BigDigit) -> BigUint {
|
||||||
|
if self.data.len() == 0 {
|
||||||
|
self.data.push(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
let carry = __add2(&mut self.data, &[other]);
|
||||||
|
if carry != 0 {
|
||||||
|
self.data.push(carry);
|
||||||
|
}
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
forward_val_val_binop!(impl Sub for BigUint, sub);
|
forward_val_val_binop!(impl Sub for BigUint, sub);
|
||||||
forward_ref_ref_binop!(impl Sub for BigUint, sub);
|
forward_ref_ref_binop!(impl Sub for BigUint, sub);
|
||||||
|
|
||||||
|
|
|
@ -690,6 +690,26 @@ fn test_add() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_scalar_add() {
|
||||||
|
for elm in SUM_TRIPLES.iter() {
|
||||||
|
let (a_vec, b_vec, c_vec) = *elm;
|
||||||
|
let c = BigUint::from_slice(c_vec);
|
||||||
|
|
||||||
|
if a_vec.len() == 1 {
|
||||||
|
let a = a_vec[0];
|
||||||
|
let b = BigUint::from_slice(b_vec);
|
||||||
|
assert!(b + a == c);
|
||||||
|
}
|
||||||
|
|
||||||
|
if b_vec.len() == 1 {
|
||||||
|
let a = BigUint::from_slice(a_vec);
|
||||||
|
let b = b_vec[0];
|
||||||
|
assert!(a + b == c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_sub() {
|
fn test_sub() {
|
||||||
for elm in SUM_TRIPLES.iter() {
|
for elm in SUM_TRIPLES.iter() {
|
||||||
|
|
Loading…
Reference in New Issue