Hi Ivan,
2010/12/6 Ivan Maidanski <[email protected]>:
>> > Sorry for the provided test below - it doesn't test the things that
>> are fixed by the attached patch. In fact, the test is for a bug that has been
>> already fixed since Classpath v0.93 (by not relying on
>> setMaximumIntegerDigits
>> implementation). So, the correct test is:
>> >
>> > import java.text.*;
>> > import java.util.*;
>> > public class DecimalFormatTest {
>> > public static void main(String[] args) throws ParseException {
>> > NumberFormat numberFormat =
>> NumberFormat.getInstance(Locale.getDefault());
>> > numberFormat.setGroupingUsed (false);
>> > numberFormat.setParseIntegerOnly (true);
>> > numberFormat.setMaximumFractionDigits (0);
>> > int fmt_count = 2;
>> > numberFormat.setMinimumIntegerDigits(fmt_count);
>> > numberFormat.setMaximumIntegerDigits(fmt_count);
>> > System.out.println(numberFormat.parse("1234567890")); //
>> should print "12"
>> > }
>> > }
>> >
>> > It tests the following code change (by the attached patch) in
>> DecimalFormat.parse():
>> >
>> > int stop = start + this.maximumIntegerDigits + maximumFractionDigits +
>> 2;
>> > if (useExponentialNotation)
>> > stop += minExponentDigits + 1;
>> >
>> > ->
>> >
>> > int stop = start + maximumIntegerDigits;
>> > if (maximumFractionDigits > 0)
>> > stop += maximumFractionDigits + 1;
>> > if (useExponentialNotation)
>> > stop += (minExponentDigits > 0 ? minExponentDigits : 1) + 2;
>> >
>> >
>> > Note, however, that the test does not print the expected "12"
>> on Sun JRE 6.
>>
>> I'm not able to reproduce the desired behavior with Sun JRE:
>
> I repeat: Note, however, that the test does NOT print the expected "12" on
> Sun JRE 6
>
> with Sun JRE: it prints 1234567890
> with Classpath: 1234
> with Classpath+this_patch: 12
Oh, right. Sorry abut that. I can indeed reproduce the behavior described above.
> I could simulate Sun JRE behavior but the author of the Classpath
> DecimalFormat.parse() implementation (IMHO) wanted setMaximumIntegerDigits()
> to act as expected. Any opinion what way should we follow?
I'm not a Classpath developer so my opinion doesn't matter that much.
I'm bit surprised, though, that we'd want behavior that doesn't match
Sun JRE. To me, any API behavior (even if it's a bug) that has lived
long enough in Sun JRE is what Classpath ought to aim at.
Compatibility is not just following the specification but also taking
real-world wrinkles into account.
Pekka