diff options
-rw-r--r-- | src/lib/math/bigint/big_ops3.cpp | 1 | ||||
-rw-r--r-- | src/tests/data/bn/add.vec | 26 | ||||
-rw-r--r-- | src/tests/data/bn/sub.vec | 38 |
3 files changed, 59 insertions, 6 deletions
diff --git a/src/lib/math/bigint/big_ops3.cpp b/src/lib/math/bigint/big_ops3.cpp index eed8a29a0..680eca635 100644 --- a/src/lib/math/bigint/big_ops3.cpp +++ b/src/lib/math/bigint/big_ops3.cpp @@ -66,6 +66,7 @@ BigInt operator-(const BigInt& x, const BigInt& y) { if(x.sign() != y.sign()) bigint_shl2(z.mutable_data(), x.data(), x_sw, 0, 1); + z.set_sign(y.reverse_sign()); } else if(relative_size > 0) { diff --git a/src/tests/data/bn/add.vec b/src/tests/data/bn/add.vec index d7fb72d57..4829e1706 100644 --- a/src/tests/data/bn/add.vec +++ b/src/tests/data/bn/add.vec @@ -15,9 +15,29 @@ In1 = 0x1 In2 = 0x1 Output = 0x2 -In1 = 0x1 -In2 = -0x1 -Output = 0x0 +In1 = 1 +In2 = -1 +Output = 0 + +In1 = -1 +In2 = 1 +Output = 0 + +In1 = -1 +In2 = -1 +Output = -2 + +In1 = 1 +In2 = -2 +Output = -1 + +In1 = -2 +In2 = 1 +Output = -1 + +In1 = -2 +In2 = -1 +Output = -3 In1 = 0x5 In2 = 0x0 diff --git a/src/tests/data/bn/sub.vec b/src/tests/data/bn/sub.vec index 5b649ef87..a3cac4206 100644 --- a/src/tests/data/bn/sub.vec +++ b/src/tests/data/bn/sub.vec @@ -7,9 +7,41 @@ In1 = 0x0 In2 = 0x1 Output = -0x1 -In1 = 0x1 -In2 = -0x1 -Output = 0x2 +In1 = 1 +In2 = -1 +Output = 2 + +In1 = -1 +In2 = 1 +Output = -2 + +In1 = -1 +In2 = -1 +Output = 0 + +In1 = 1 +In2 = 1 +Output = 0 + +In1 = 1 +In2 = -1 +Output = 2 + +In1 = 1 +In2 = -2 +Output = 3 + +In1 = -1 +In2 = 2 +Output = -3 + +In1 = -3 +In2 = -1 +Output = -2 + +In1 = -3 +In2 = 1 +Output = -4 In1 = 0x64 In2 = -0x64 |