Skip to content

Commit 2e12357

Browse files
committed
ConfigurableDoubleParser: Fix check for NumberFormatSymbols containing a format character. Add unit tests.
1 parent afca0b4 commit 2e12357

File tree

3 files changed

+19
-10
lines changed

3 files changed

+19
-10
lines changed

fastdoubleparser-dev/src/main/java/ch.randelshofer.fastdoubleparser/ch/randelshofer/fastdoubleparser/NumberFormatSymbolsInfo.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,13 @@ static boolean isAsciiCharCollection(Collection<Character> collection) {
7676
static boolean containsFormatChars(NumberFormatSymbols symbols) {
7777
FormatCharSet formatCharSet = new FormatCharSet();
7878
return containsChars(symbols.decimalSeparator(), formatCharSet)
79-
&& containsChars(symbols.groupingSeparator(), formatCharSet)
80-
&& containsChars(symbols.exponentSeparator(), formatCharSet)
81-
&& containsChars(symbols.minusSign(), formatCharSet)
82-
&& containsChars(symbols.plusSign(), formatCharSet)
83-
&& containsChars(symbols.infinity(), formatCharSet)
84-
&& containsChars(symbols.nan(), formatCharSet)
85-
&& containsChars(symbols.digits(), formatCharSet)
79+
|| containsChars(symbols.groupingSeparator(), formatCharSet)
80+
|| containsChars(symbols.exponentSeparator(), formatCharSet)
81+
|| containsChars(symbols.minusSign(), formatCharSet)
82+
|| containsChars(symbols.plusSign(), formatCharSet)
83+
|| containsChars(symbols.infinity(), formatCharSet)
84+
|| containsChars(symbols.nan(), formatCharSet)
85+
|| containsChars(symbols.digits(), formatCharSet)
8686
;
8787
}
8888

fastdoubleparser-dev/src/test/java/ch.randelshofer.fastdoubleparser/ch/randelshofer/fastdoubleparser/ConfigurableDoubleParserTest.java

+7
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,13 @@ private void test(NumberTestData d, ToDoubleFunction<NumberTestData> f) {
154154
}
155155
assertEquals(d.expectedThrowableClass(), e.getClass());
156156
}
157+
} else if (d.expectedValue() == null) {
158+
try {
159+
double actual = f.applyAsDouble(d);
160+
fail("should throw an exception but returned " + actual);
161+
} catch (Exception e) {
162+
//success
163+
}
157164
} else {
158165
double actual = f.applyAsDouble(d);
159166
assertEquals(d.expectedValue().doubleValue(), actual);

fastdoubleparser-dev/src/test/java/ch.randelshofer.fastdoubleparser/ch/randelshofer/fastdoubleparser/ConfigurableDoubleParserTestDataFactory.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -187,14 +187,16 @@ public static List<NumberTestData> createCustomArabianNumberFormatSymbolsTestDat
187187
locale
188188
);
189189
NumberFormatSymbols symbols = NumberFormatSymbols.fromDecimalFormatSymbols(dfs);
190-
symbols.withMinusSign(new LinkedHashSet<>(Arrays.asList('-', '\u061C')));
191190

192191
DecimalFormat fmt = new DecimalFormat("#00.0####E0", dfs);
193192
for (double n : new double[]{3e-9, -7e8, Double.NaN, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY}) {
194193
list.add(new NumberTestData(locale + " " + fmt.format(n), locale, symbols, fmt.format(n), n));
195194
}
196-
list.add(new NumberTestData(locale + " customized locale, U+061C followed by - sign", locale, symbols, true, "\u061C-١٢٣٬٤٥٦٫٧٨٩", -123_456.789));
197-
// list.add(new NumberTestData(locale+" customized locale, U+061C not followed by - sign", locale, symbols, true, "\u061C١٢٣٬٤٥٦٫٧٨٩", -123_456.789));
195+
list.add(new NumberTestData(locale + " locale, U+061C followed by '-' sign", locale, symbols, true, "\u061C-١٢٣٬٤٥٦٫٧٨٩", -123_456.789));
196+
197+
NumberFormatSymbols symbols2 = symbols.withMinusSign(new LinkedHashSet<>(Arrays.asList('-', '\u061C')));
198+
list.add(new NumberTestData(locale + " customized locale, U+061C followed by '-' sign, with U+061C as a format symbol", locale, symbols2, true, "\u061C-١٢٣٬٤٥٦٫٧٨٩", null));
199+
list.add(new NumberTestData(locale + " customized locale, U+061C not followed by '-' sign, with U+061C as a format symbol", locale, symbols2, true, "\u061C١٢٣٬٤٥٦٫٧٨٩", -123_456.789));
198200

199201
return list;
200202
}

0 commit comments

Comments
 (0)