Partially implement subtraction
All checks were successful
timw4mail/rusty-numbers/pipeline/head This commit looks good
All checks were successful
timw4mail/rusty-numbers/pipeline/head This commit looks good
This commit is contained in:
parent
d0ac326944
commit
ae77ede1c0
@ -137,7 +137,33 @@ impl Sub for BigInt {
|
||||
type Output = Self;
|
||||
|
||||
fn sub(self, rhs: Self) -> Self::Output {
|
||||
todo!()
|
||||
let mut out = BigInt::new_empty();
|
||||
|
||||
let u_digits = self.inner.len();
|
||||
let v_digits = rhs.inner.len();
|
||||
|
||||
let digits = if v_digits > u_digits {
|
||||
v_digits
|
||||
} else {
|
||||
u_digits
|
||||
};
|
||||
|
||||
let mut borrow = 0usize;
|
||||
for i in 0..digits {
|
||||
let a = *self.inner.get(i).unwrap_or(&0usize);
|
||||
let b = *rhs.inner.get(i).unwrap_or(&0usize);
|
||||
|
||||
if a > b {
|
||||
out.inner.push(a - b - borrow);
|
||||
borrow = 0;
|
||||
} else if a < b {
|
||||
todo!();
|
||||
} else {
|
||||
todo!();
|
||||
}
|
||||
}
|
||||
|
||||
out
|
||||
}
|
||||
}
|
||||
|
||||
@ -335,6 +361,18 @@ mod tests {
|
||||
assert_eq!(sum.inner[1], 1usize);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_sub() {
|
||||
let a = BigInt::from(core::usize::MAX);
|
||||
let b = BigInt::from(core::u16::MAX);
|
||||
|
||||
let diff = a - b;
|
||||
assert_eq!(
|
||||
diff.inner[0],
|
||||
core::usize::MAX - core::u16::MAX as usize
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_not() {
|
||||
let a = BigInt::from(0u8);
|
||||
|
Loading…
Reference in New Issue
Block a user