From f46776c220e54297f286b3411158110034d83e2d Mon Sep 17 00:00:00 2001 From: "floyd.dsilva" Date: Fri, 3 Apr 2026 17:43:40 +0530 Subject: [PATCH 01/11] Add javadoc examples for StringUtils.isBlank to include EM SPACE and NO-BREAK SPACE --- src/main/java/org/apache/commons/lang3/StringUtils.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 02d32f8a091..3b35ed1ede5 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -3503,6 +3503,8 @@ public static boolean isAsciiPrintable(final CharSequence cs) { * StringUtils.isBlank(null) = true * StringUtils.isBlank("") = true * StringUtils.isBlank(" ") = true + * StringUtils.isBlank("{@literal \}u2003") = true // EM SPACE + * StringUtils.isBlank("{@literal \}u00A0") = true // NO-BREAK SPACE * StringUtils.isBlank("bob") = false * StringUtils.isBlank(" bob ") = false * From 260ba9cc2274036406d97d23883151e0858a7a70 Mon Sep 17 00:00:00 2001 From: "floyd.dsilva" Date: Fri, 3 Apr 2026 23:09:07 +0530 Subject: [PATCH 02/11] reverting past commit f46776c220e54297f286b3411158110034d83e2d --- src/main/java/org/apache/commons/lang3/StringUtils.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 3b35ed1ede5..02d32f8a091 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -3503,8 +3503,6 @@ public static boolean isAsciiPrintable(final CharSequence cs) { * StringUtils.isBlank(null) = true * StringUtils.isBlank("") = true * StringUtils.isBlank(" ") = true - * StringUtils.isBlank("{@literal \}u2003") = true // EM SPACE - * StringUtils.isBlank("{@literal \}u00A0") = true // NO-BREAK SPACE * StringUtils.isBlank("bob") = false * StringUtils.isBlank(" bob ") = false * From 1537408bd58c2adde3be60176cceb4e3168d2f45 Mon Sep 17 00:00:00 2001 From: "floyd.dsilva" Date: Sat, 4 Apr 2026 21:54:06 +0530 Subject: [PATCH 03/11] Enhance NumberUtils to improve number parsing and validation. Added error handling for invalid exponential formats in createNumber and updated isCreatable to handle edge cases. Added new test cases for extreme exponent values. --- .../commons/lang3/math/NumberUtils.java | 32 ++++++++++++++++++- .../commons/lang3/math/NumberUtilsTest.java | 3 ++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java index d4863e746be..9f9292a5e94 100644 --- a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java +++ b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java @@ -508,7 +508,11 @@ public static Number createNumber(final String str) { } catch (final NumberFormatException ignored) { // ignore the bad number } - return createBigDecimal(str); + try{ + return createBigDecimal(str); + } catch (final NumberFormatException ignored) { + throw new NumberFormatException(str + " is not a valid number."); + } } /** @@ -620,6 +624,7 @@ public static boolean isCreatable(final String str) { sz--; // don't want to loop to the last char, check it afterwards // for type qualifiers int i = start; + int expPos = -1; // loop to the next to last char or to the last char if we need another digit to // make a valid number (e.g. chars[0..5] = "1234E") while (i < sz || i < sz + 1 && allowSigns && !foundDigit) { @@ -643,6 +648,7 @@ public static boolean isCreatable(final String str) { } hasExp = true; allowSigns = true; + expPos = i; } else if (isSign(chars[i])) { if (!allowSigns) { return false; @@ -654,6 +660,30 @@ public static boolean isCreatable(final String str) { } i++; } + if (expPos > -1 && expPos < chars.length - 1) { + int expEndPos = chars.length; + + final char lastChar = chars[expEndPos - 1]; + if (lastChar == 'd' || lastChar == 'D' + || lastChar == 'f' || lastChar == 'F' + || lastChar == 'l' || lastChar == 'L') { + expEndPos--; + } + + try{ + final int exp=Integer.parseInt(str.substring(expPos + 1, expEndPos)); + if(exp == Integer.MIN_VALUE) { + return false; + } + } catch (final NumberFormatException ignored) { + // Overflow during parsing: + // Negative overflow => unrepresentable + // Positive overflow => representable (BigDecimal supports it) + if (chars[0]=='-') { + return false; + } + } + } if (i < chars.length) { if (CharUtils.isAsciiNumeric(chars[i])) { // no type qualifier, OK diff --git a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java index a41842c0d21..076e0eab58e 100644 --- a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java @@ -887,6 +887,9 @@ void testIsCreatable() { compareIsCreatableWithCreateNumber(".D", false); // LANG-1646 compareIsCreatableWithCreateNumber(".e10", false); // LANG-1646 compareIsCreatableWithCreateNumber(".e10D", false); // LANG-1646 + compareIsCreatableWithCreateNumber("1E-2147483648", false); + compareIsCreatableWithCreateNumber("1E2147483648", true); + compareIsCreatableWithCreateNumber("1E+2147483648", true); } @Test From a46c98f5ebab0610c146d0f5e0fc04125341754f Mon Sep 17 00:00:00 2001 From: "floyd.dsilva" Date: Sun, 5 Apr 2026 10:07:20 +0530 Subject: [PATCH 04/11] Added code formatting and fixed positive exponent behaviour along with its test cases --- .../commons/lang3/math/NumberUtils.java | 20 +++++++------------ .../commons/lang3/math/NumberUtilsTest.java | 4 ++-- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java index 9f9292a5e94..2bbfeda12c9 100644 --- a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java +++ b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java @@ -508,7 +508,7 @@ public static Number createNumber(final String str) { } catch (final NumberFormatException ignored) { // ignore the bad number } - try{ + try { return createBigDecimal(str); } catch (final NumberFormatException ignored) { throw new NumberFormatException(str + " is not a valid number."); @@ -661,8 +661,7 @@ public static boolean isCreatable(final String str) { i++; } if (expPos > -1 && expPos < chars.length - 1) { - int expEndPos = chars.length; - + int expEndPos = chars.length; final char lastChar = chars[expEndPos - 1]; if (lastChar == 'd' || lastChar == 'D' || lastChar == 'f' || lastChar == 'F' @@ -670,19 +669,14 @@ public static boolean isCreatable(final String str) { expEndPos--; } - try{ - final int exp=Integer.parseInt(str.substring(expPos + 1, expEndPos)); - if(exp == Integer.MIN_VALUE) { + try { + final int exp = Integer.parseInt(str.substring(expPos + 1, expEndPos)); + if (exp == Integer.MIN_VALUE) { return false; } } catch (final NumberFormatException ignored) { - // Overflow during parsing: - // Negative overflow => unrepresentable - // Positive overflow => representable (BigDecimal supports it) - if (chars[0]=='-') { - return false; - } - } + return false; + } } if (i < chars.length) { if (CharUtils.isAsciiNumeric(chars[i])) { diff --git a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java index 076e0eab58e..9dd71eba456 100644 --- a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java @@ -888,8 +888,8 @@ void testIsCreatable() { compareIsCreatableWithCreateNumber(".e10", false); // LANG-1646 compareIsCreatableWithCreateNumber(".e10D", false); // LANG-1646 compareIsCreatableWithCreateNumber("1E-2147483648", false); - compareIsCreatableWithCreateNumber("1E2147483648", true); - compareIsCreatableWithCreateNumber("1E+2147483648", true); + compareIsCreatableWithCreateNumber("1E2147483648", false); + compareIsCreatableWithCreateNumber("1E+2147483648", false); } @Test From a521f17835711a29697a07fc03d1c32a5600623e Mon Sep 17 00:00:00 2001 From: "floyd.dsilva" Date: Sun, 5 Apr 2026 18:27:57 +0530 Subject: [PATCH 05/11] Reverted createNumber method in NumberUtils to remove redundant try-catch block for createBigDecimal. --- .../java/org/apache/commons/lang3/math/NumberUtils.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java index 2bbfeda12c9..8720367ad43 100644 --- a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java +++ b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java @@ -508,11 +508,7 @@ public static Number createNumber(final String str) { } catch (final NumberFormatException ignored) { // ignore the bad number } - try { - return createBigDecimal(str); - } catch (final NumberFormatException ignored) { - throw new NumberFormatException(str + " is not a valid number."); - } + return createBigDecimal(str); } /** From 8d4ed1cc175929c78aaf991d77bf31380a99ddd1 Mon Sep 17 00:00:00 2001 From: "floyd.dsilva" Date: Sun, 5 Apr 2026 19:14:52 +0530 Subject: [PATCH 06/11] Refactor isCreatable method in NumberUtils to improve code clarity by removing unnecessary line breaks and ensuring consistent formatting. --- src/main/java/org/apache/commons/lang3/math/NumberUtils.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java index 8720367ad43..e787ef52ef5 100644 --- a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java +++ b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java @@ -657,14 +657,13 @@ public static boolean isCreatable(final String str) { i++; } if (expPos > -1 && expPos < chars.length - 1) { - int expEndPos = chars.length; + int expEndPos = chars.length; final char lastChar = chars[expEndPos - 1]; if (lastChar == 'd' || lastChar == 'D' || lastChar == 'f' || lastChar == 'F' || lastChar == 'l' || lastChar == 'L') { expEndPos--; } - try { final int exp = Integer.parseInt(str.substring(expPos + 1, expEndPos)); if (exp == Integer.MIN_VALUE) { From dbbe9b4591545a9f27da9709d2f3548d2f3ef0ee Mon Sep 17 00:00:00 2001 From: "floyd.dsilva" Date: Mon, 6 Apr 2026 20:56:30 +0530 Subject: [PATCH 07/11] Enhance isCreatable method in NumberUtils to handle edge cases for large exponent values based on Java version. Updated corresponding test cases for consistency. --- .../java/org/apache/commons/lang3/math/NumberUtils.java | 7 +++++-- .../org/apache/commons/lang3/math/NumberUtilsTest.java | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java index e787ef52ef5..55fdb9254bb 100644 --- a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java +++ b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java @@ -24,7 +24,9 @@ import java.util.function.Consumer; import org.apache.commons.lang3.CharUtils; +import org.apache.commons.lang3.JavaVersion; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.SystemUtils; import org.apache.commons.lang3.Validate; /** @@ -664,13 +666,14 @@ public static boolean isCreatable(final String str) { || lastChar == 'l' || lastChar == 'L') { expEndPos--; } + final String expStr = str.substring(expPos + 1, expEndPos); try { - final int exp = Integer.parseInt(str.substring(expPos + 1, expEndPos)); + final int exp = Integer.parseInt(expStr); if (exp == Integer.MIN_VALUE) { return false; } } catch (final NumberFormatException ignored) { - return false; + return ("2147483648".equals(expStr) || "+2147483648".equals(expStr)) && SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21); } } if (i < chars.length) { diff --git a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java index 9dd71eba456..ac8462729bc 100644 --- a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java @@ -36,7 +36,9 @@ import java.util.function.Function; import org.apache.commons.lang3.AbstractLangTest; +import org.apache.commons.lang3.JavaVersion; import org.apache.commons.lang3.SystemProperties; +import org.apache.commons.lang3.SystemUtils; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -888,8 +890,8 @@ void testIsCreatable() { compareIsCreatableWithCreateNumber(".e10", false); // LANG-1646 compareIsCreatableWithCreateNumber(".e10D", false); // LANG-1646 compareIsCreatableWithCreateNumber("1E-2147483648", false); - compareIsCreatableWithCreateNumber("1E2147483648", false); - compareIsCreatableWithCreateNumber("1E+2147483648", false); + compareIsCreatableWithCreateNumber("1E2147483648", SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); + compareIsCreatableWithCreateNumber("1E+2147483648", SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); } @Test From 9ba768a7af9f2bfa01b0bd90918563898ae731ae Mon Sep 17 00:00:00 2001 From: "floyd.dsilva" Date: Wed, 8 Apr 2026 22:06:56 +0530 Subject: [PATCH 08/11] Refine isCreatable method in NumberUtils to accurately handle large exponent values for Java 21 and later. Added comprehensive test cases to validate behavior for various exponent scenarios. --- .../org/apache/commons/lang3/math/NumberUtils.java | 5 ++++- .../apache/commons/lang3/math/NumberUtilsTest.java | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java index 55fdb9254bb..b36ef517810 100644 --- a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java +++ b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java @@ -673,7 +673,10 @@ public static boolean isCreatable(final String str) { return false; } } catch (final NumberFormatException ignored) { - return ("2147483648".equals(expStr) || "+2147483648".equals(expStr)) && SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21); + // Largest positive exponent of Integer.MAX_VALUE+1 which is supported by Java 21 and later. + final String largestPositiveExponent = String.valueOf(Integer.MAX_VALUE+1); + final boolean isLargestPositiveExponent = largestPositiveExponent.equals(expStr) || ("+" + largestPositiveExponent).equals(expStr); + return isLargestPositiveExponent && SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21); } } if (i < chars.length) { diff --git a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java index ac8462729bc..c922c7c6d96 100644 --- a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java @@ -889,9 +889,21 @@ void testIsCreatable() { compareIsCreatableWithCreateNumber(".D", false); // LANG-1646 compareIsCreatableWithCreateNumber(".e10", false); // LANG-1646 compareIsCreatableWithCreateNumber(".e10D", false); // LANG-1646 + + compareIsCreatableWithCreateNumber("1E2147483647", true); + compareIsCreatableWithCreateNumber("1E-2147483647", true); compareIsCreatableWithCreateNumber("1E-2147483648", false); compareIsCreatableWithCreateNumber("1E2147483648", SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); compareIsCreatableWithCreateNumber("1E+2147483648", SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); + compareIsCreatableWithCreateNumber("1E+2147483649", false); + compareIsCreatableWithCreateNumber("1E-2147483649", false); + + compareIsCreatableWithCreateNumber("1E2147483648D",SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); + compareIsCreatableWithCreateNumber("1E-2147483648D", false); + + compareIsCreatableWithCreateNumber("1.0E2147483648",SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); + compareIsCreatableWithCreateNumber("1.0E-2147483648", false); + } @Test From 22284a073f79d93cb7e0ad5d2635626b2baed9f3 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Wed, 8 Apr 2026 14:15:37 -0400 Subject: [PATCH 09/11] Fix Checkstyle error. --- src/main/java/org/apache/commons/lang3/math/NumberUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java index b36ef517810..7ec6ee37720 100644 --- a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java +++ b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java @@ -673,8 +673,8 @@ public static boolean isCreatable(final String str) { return false; } } catch (final NumberFormatException ignored) { - // Largest positive exponent of Integer.MAX_VALUE+1 which is supported by Java 21 and later. - final String largestPositiveExponent = String.valueOf(Integer.MAX_VALUE+1); + // Largest positive exponent of Integer.MAX_VALUE + 1 which is supported by Java 21 and later. + final String largestPositiveExponent = String.valueOf(Integer.MAX_VALUE + 1); final boolean isLargestPositiveExponent = largestPositiveExponent.equals(expStr) || ("+" + largestPositiveExponent).equals(expStr); return isLargestPositiveExponent && SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21); } From 5be0c0e20eb6bb8f083aafc98c6490d0309e4b18 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Wed, 8 Apr 2026 14:16:57 -0400 Subject: [PATCH 10/11] Fix more Checkstyle errors. --- .../org/apache/commons/lang3/math/NumberUtilsTest.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java index c922c7c6d96..ddd8020370e 100644 --- a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java @@ -889,7 +889,7 @@ void testIsCreatable() { compareIsCreatableWithCreateNumber(".D", false); // LANG-1646 compareIsCreatableWithCreateNumber(".e10", false); // LANG-1646 compareIsCreatableWithCreateNumber(".e10D", false); // LANG-1646 - + compareIsCreatableWithCreateNumber("1E2147483647", true); compareIsCreatableWithCreateNumber("1E-2147483647", true); compareIsCreatableWithCreateNumber("1E-2147483648", false); @@ -897,13 +897,12 @@ void testIsCreatable() { compareIsCreatableWithCreateNumber("1E+2147483648", SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); compareIsCreatableWithCreateNumber("1E+2147483649", false); compareIsCreatableWithCreateNumber("1E-2147483649", false); - - compareIsCreatableWithCreateNumber("1E2147483648D",SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); + + compareIsCreatableWithCreateNumber("1E2147483648D", SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); compareIsCreatableWithCreateNumber("1E-2147483648D", false); - compareIsCreatableWithCreateNumber("1.0E2147483648",SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); + compareIsCreatableWithCreateNumber("1.0E2147483648", SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); compareIsCreatableWithCreateNumber("1.0E-2147483648", false); - } @Test From 8ac4ea359bcbd4c05e8370442288c0afd61a37da Mon Sep 17 00:00:00 2001 From: "floyd.dsilva" Date: Sat, 11 Apr 2026 19:11:32 +0530 Subject: [PATCH 11/11] Update isCreatable method in NumberUtils to use a constant for the largest positive exponent and enhance test cases for various exponent formats, including edge cases for Java 21 compatibility. --- .../java/org/apache/commons/lang3/math/NumberUtils.java | 2 +- .../org/apache/commons/lang3/math/NumberUtilsTest.java | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java index 7ec6ee37720..4910db6a590 100644 --- a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java +++ b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java @@ -674,7 +674,7 @@ public static boolean isCreatable(final String str) { } } catch (final NumberFormatException ignored) { // Largest positive exponent of Integer.MAX_VALUE + 1 which is supported by Java 21 and later. - final String largestPositiveExponent = String.valueOf(Integer.MAX_VALUE + 1); + final String largestPositiveExponent = "2147483648"; final boolean isLargestPositiveExponent = largestPositiveExponent.equals(expStr) || ("+" + largestPositiveExponent).equals(expStr); return isLargestPositiveExponent && SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21); } diff --git a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java index ddd8020370e..22a85265bc2 100644 --- a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java @@ -889,20 +889,23 @@ void testIsCreatable() { compareIsCreatableWithCreateNumber(".D", false); // LANG-1646 compareIsCreatableWithCreateNumber(".e10", false); // LANG-1646 compareIsCreatableWithCreateNumber(".e10D", false); // LANG-1646 - compareIsCreatableWithCreateNumber("1E2147483647", true); + compareIsCreatableWithCreateNumber("1E+2147483647", true); compareIsCreatableWithCreateNumber("1E-2147483647", true); compareIsCreatableWithCreateNumber("1E-2147483648", false); compareIsCreatableWithCreateNumber("1E2147483648", SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); compareIsCreatableWithCreateNumber("1E+2147483648", SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); compareIsCreatableWithCreateNumber("1E+2147483649", false); compareIsCreatableWithCreateNumber("1E-2147483649", false); - compareIsCreatableWithCreateNumber("1E2147483648D", SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); compareIsCreatableWithCreateNumber("1E-2147483648D", false); - + compareIsCreatableWithCreateNumber("1E2147483648F", SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); + compareIsCreatableWithCreateNumber("1E+2147483648F", SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); + compareIsCreatableWithCreateNumber("1E-2147483648F", false); compareIsCreatableWithCreateNumber("1.0E2147483648", SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_21)); compareIsCreatableWithCreateNumber("1.0E-2147483648", false); + compareIsCreatableWithCreateNumber("1E+999999999999999999999", false); + compareIsCreatableWithCreateNumber("1E-999999999999999999999", false); } @Test