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.
|
// Subtracts operand_b from operand_a and stores the difference in storage.
|
||||||
// It assumes operand_a contains the larger "integer" and that storage is
|
// 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) {
|
fn subtract_digit_array(operand_a []u32, operand_b []u32, mut storage []u32) {
|
||||||
// Zero length cases
|
// Zero length cases
|
||||||
if operand_a.len == 0 {
|
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)
|
storage[index] = u32(a_digit - b_digit)
|
||||||
}
|
}
|
||||||
|
|
||||||
if storage.last() == 0 {
|
for storage.len > 0 && storage.last() == 0 {
|
||||||
storage.delete_last()
|
storage.delete_last()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,6 +81,14 @@ fn test_subtract_digit_array_03() {
|
||||||
assert c == [u32(0), 0, u32(-1), u32(-1), 0, 13]
|
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() {
|
fn test_multiply_digit_array_01() {
|
||||||
a := [u32(0), 0, 0, 1]
|
a := [u32(0), 0, 0, 1]
|
||||||
b := [u32(0), 0, 1]
|
b := [u32(0), 0, 1]
|
||||||
|
|
Loading…
Reference in New Issue