math.big: fix subtract_digit_array (#11451)
parent
1a2d5f65fb
commit
c8d4a64512
|
@ -69,7 +69,7 @@ fn add_digit_array(operand_a []u32, operand_b []u32, mut sum []u32) {
|
|||
|
||||
// Subtracts operand_b from operand_a and stores the difference in storage.
|
||||
// It assumes operand_a contains the larger "integer" and that storage is
|
||||
// the same size as operand_a
|
||||
// the same size as operand_a and is 0
|
||||
fn subtract_digit_array(operand_a []u32, operand_b []u32, mut storage []u32) {
|
||||
// Zero length cases
|
||||
if operand_a.len == 0 {
|
||||
|
@ -104,7 +104,7 @@ fn subtract_digit_array(operand_a []u32, operand_b []u32, mut storage []u32) {
|
|||
storage[index] = u32(a_digit - b_digit)
|
||||
}
|
||||
|
||||
if storage.last() == 0 {
|
||||
for storage.len > 0 && storage.last() == 0 {
|
||||
storage.delete_last()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -81,6 +81,14 @@ fn test_subtract_digit_array_03() {
|
|||
assert c == [u32(0), 0, u32(-1), u32(-1), 0, 13]
|
||||
}
|
||||
|
||||
fn test_subtract_digit_array_04() {
|
||||
a := [u32(0x2), 0x4, 0x5, 0x3]
|
||||
b := [u32(0x0), 0x0, 0x5, 0x3]
|
||||
mut c := []u32{len: a.len}
|
||||
subtract_digit_array(a, b, mut c)
|
||||
assert c == [u32(0x2), 0x4]
|
||||
}
|
||||
|
||||
fn test_multiply_digit_array_01() {
|
||||
a := [u32(0), 0, 0, 1]
|
||||
b := [u32(0), 0, 1]
|
||||
|
|
Loading…
Reference in New Issue