This is an automated email from the ASF dual-hosted git repository.
toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git
The following commit(s) were added to refs/heads/master by this push:
new bcd94f6 Fix corner case bug with handling constants with unsigned ints
bcd94f6 is described below
commit bcd94f6661d904d70a5715784301ae0010ac958c
Author: Antoine Toulme <[email protected]>
AuthorDate: Sat Nov 30 14:25:57 2019 -0800
Fix corner case bug with handling constants with unsigned ints
---
.../main/java/org/apache/tuweni/units/bigints/BaseUInt256Value.java | 6 ++++++
units/src/main/java/org/apache/tuweni/units/bigints/UInt256.java | 4 ++--
.../java/org/apache/tuweni/units/bigints/BaseUInt256ValueTest.java | 1 +
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git
a/units/src/main/java/org/apache/tuweni/units/bigints/BaseUInt256Value.java
b/units/src/main/java/org/apache/tuweni/units/bigints/BaseUInt256Value.java
index 490434d..f0bd282 100644
--- a/units/src/main/java/org/apache/tuweni/units/bigints/BaseUInt256Value.java
+++ b/units/src/main/java/org/apache/tuweni/units/bigints/BaseUInt256Value.java
@@ -198,6 +198,9 @@ public abstract class BaseUInt256Value<T extends
UInt256Value<T>> implements UIn
if (value.equals(UInt256.ONE)) {
return copy();
}
+ if (this.value.equals(UInt256.ONE)) {
+ return ctor.apply(value);
+ }
return ctor.apply(this.value.multiply(value));
}
@@ -209,6 +212,9 @@ public abstract class BaseUInt256Value<T extends
UInt256Value<T>> implements UIn
if (value == 1) {
return copy();
}
+ if (this.value.equals(UInt256.ONE)) {
+ return ctor.apply(UInt256.valueOf(value));
+ }
return ctor.apply(this.value.multiply(value));
}
diff --git a/units/src/main/java/org/apache/tuweni/units/bigints/UInt256.java
b/units/src/main/java/org/apache/tuweni/units/bigints/UInt256.java
index eb0899f..4ade4ac 100644
--- a/units/src/main/java/org/apache/tuweni/units/bigints/UInt256.java
+++ b/units/src/main/java/org/apache/tuweni/units/bigints/UInt256.java
@@ -191,7 +191,7 @@ public final class UInt256 implements UInt256Value<UInt256>
{
result[INTS_SIZE - 2] = (int) (sum & LONG_MASK);
constant &= result[INTS_SIZE - 2] == 0;
long signExtent = (value >> 63) & LONG_MASK;
- for (int i = INTS_SIZE - 3; i >= 0; --i) {
+ for (int i = INTS_SIZE - 2; i >= 0; --i) {
sum = (this.ints[i] & LONG_MASK) + signExtent + (sum >>> 32);
result[i] = (int) (sum & LONG_MASK);
constant &= result[i] == 0;
@@ -295,7 +295,7 @@ public final class UInt256 implements UInt256Value<UInt256>
{
}
boolean constant = true;
- for (int i = INTS_SIZE; i < (INTS_SIZE + INTS_SIZE) - 2; ++i) {
+ for (int i = INTS_SIZE; i < (INTS_SIZE + INTS_SIZE) - 1; ++i) {
constant &= (result[i] == 0);
}
if (constant && result[INTS_SIZE + INTS_SIZE - 1] >= 0 && result[INTS_SIZE
+ INTS_SIZE - 1] <= MAX_CONSTANT) {
diff --git
a/units/src/test/java/org/apache/tuweni/units/bigints/BaseUInt256ValueTest.java
b/units/src/test/java/org/apache/tuweni/units/bigints/BaseUInt256ValueTest.java
index bec3bb9..728785a 100644
---
a/units/src/test/java/org/apache/tuweni/units/bigints/BaseUInt256ValueTest.java
+++
b/units/src/test/java/org/apache/tuweni/units/bigints/BaseUInt256ValueTest.java
@@ -389,6 +389,7 @@ class BaseUInt256ValueTest {
Arguments.of(v(20), 1L, v(20)),
Arguments.of(hv("0x0a0000000000"), 1L, hv("0x0a0000000000")),
Arguments.of(v(1), 10995116277760L, hv("0x0a0000000000")),
+ Arguments.of(v(7), 1152921504606846976L, hv("0x07000000000000000")),
Arguments.of(v(0), 2L, v(0)),
Arguments.of(v(1), 2L, v(2)),
Arguments.of(v(2), 2L, v(4)),
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]