diff --git a/kubernetes/src/main/java/io/kubernetes/client/custom/QuantityFormatter.java b/kubernetes/src/main/java/io/kubernetes/client/custom/QuantityFormatter.java index 0f15eacad2..92f36ee089 100644 --- a/kubernetes/src/main/java/io/kubernetes/client/custom/QuantityFormatter.java +++ b/kubernetes/src/main/java/io/kubernetes/client/custom/QuantityFormatter.java @@ -99,7 +99,7 @@ private Pair ensureExponentIsMultipleOf3(final BigInteger m private Pair removeFactorsForBase(final BigInteger value, final BigInteger base) { int times = 0; BigInteger result = value; - while (result.compareTo(base) >= 0 && result.mod(base).equals(BigInteger.ZERO)) { + while (result.abs().compareTo(base) >= 0 && result.mod(base).equals(BigInteger.ZERO)) { times++; result = result.divide(base); } diff --git a/kubernetes/src/test/java/io/kubernetes/client/custom/QuantityFormatterTest.java b/kubernetes/src/test/java/io/kubernetes/client/custom/QuantityFormatterTest.java index 324dd225c9..3ce500c60f 100644 --- a/kubernetes/src/test/java/io/kubernetes/client/custom/QuantityFormatterTest.java +++ b/kubernetes/src/test/java/io/kubernetes/client/custom/QuantityFormatterTest.java @@ -155,6 +155,22 @@ void formatFractionalBinarySi() { assertThat(formattedString).isEqualTo("123123m"); } + @Test + void formatNegativeDecimalSi() { + final String formattedString = + new QuantityFormatter() + .format(new Quantity(new BigDecimal("-100000"), Quantity.Format.DECIMAL_SI)); + assertThat(formattedString).isEqualTo("-100k"); + } + + @Test + void formatNegativeBinarySi() { + final String formattedString = + new QuantityFormatter() + .format(new Quantity(new BigDecimal(2).pow(20).negate(), Quantity.Format.BINARY_SI)); + assertThat(formattedString).isEqualTo("-1Mi"); + } + @Test void formatDecimalExponent() { final String formattedString =