[cp-patches] Re: FYI: few DecimalFormat fixes

2006-11-27 Thread Mark Wielaard
Hi Mario,

On Mon, 2006-11-27 at 03:45 +0100, Mario Torre wrote:
 I've fixed some of them. There are a couple of them difficult to find,
 though.

Nice one! This not only fixed most of the regressions, but according to
the autobuilder mauve run on classpath-testresults this (plus some of
the other patches made yesterday) made a lot of new tests PASS. I
believe we are pretty close to branching for 0.93 now.

For those that want to follow at home please take a look at:
http://news.gmane.org/gmane.comp.java.classpath.testresults
And investigate any regressions or unexpected FAILs you see there.

Thanks,

Mark


signature.asc
Description: This is a digitally signed message part


Re: FYI: few DecimalFormat fixes

2006-11-27 Thread Mark Wielaard
Hi Mario,

On Mon, 2006-11-27 at 03:45 +0100, Mario Torre wrote:
 I've fixed some of them. There are a couple of them difficult to find,
 though.

Nice one! This not only fixed most of the regressions, but according to
the autobuilder mauve run on classpath-testresults this (plus some of
the other patches made yesterday) made a lot of new tests PASS. I
believe we are pretty close to branching for 0.93 now.

For those that want to follow at home please take a look at:
http://news.gmane.org/gmane.comp.java.classpath.testresults
And investigate any regressions or unexpected FAILs you see there.

Thanks,

Mark


signature.asc
Description: This is a digitally signed message part


[cp-patches] FYI: few DecimalFormat fixes

2006-11-26 Thread Mario Torre
Il giorno dom, 26/11/2006 alle 21.06 +0100, Mark Wielaard ha scritto:

 - java.sql.Timestamp.TimestampTest
 - java.text.MessageFormat.format
 - java.text.MessageFormat.parse
 - java.text.NumberFormat.UK
 - locales.LocaleTest
 
 These all seem to be caused by the last Decimal/NumberFormat patch. We
 get a couple of new passes back for it, but it would be good to
 investigate these failures.
 
 - javax.swing.JSpinner.DefaultEditor.propertyChange
 - javax.swing.JSpinner.DefaultEditor.stateChanged
 
 Similar. Both have checks fail like:
   FAIL:  line 49: (PropertyChangeEvent) [3] -- got 88.0 but expected 88
   FAIL:  line 46: (ChangeEvent) [3] -- got 99.0 but expected 99

I've fixed some of them. There are a couple of them difficult to find,
though.

In one case the specs defines two mutually exclusives scenarios :)

They say (Format) that pos should not be null, or an NPE would be
generated, but then, in MessageFormat, let pass this example in one of
the methods:

format(argument, new StringBuffer(), null);
^^
:)

I've fixed this, though we now check in DecimalFormat for null, which is
not really correct.

I'll search for the other failures tomorrow.

Mario

2006-11-27  neugens  [EMAIL PROTECTED]

* java/text/DecimalFormat.java (formatInternal): Add an explicit test
for FieldPosition to be null.
Check if the factional part is just 0 and can be omitted from the
result.
(scanNegativePattern): Fixed index out of bound exception when
searching
for international currency symbol in negative pattern.

-- 
Lima Software, SO.PR.IND. s.r.l.
http://www.limasoftware.net/
pgp key: http://subkeys.pgp.net/

Please, support open standards:
http://opendocumentfellowship.org/petition/
http://www.nosoftwarepatents.com/
### Eclipse Workspace Patch 1.0
#P classpath
Index: java/text/DecimalFormat.java
===
RCS file: /cvsroot/classpath/classpath/java/text/DecimalFormat.java,v
retrieving revision 1.27
diff -u -r1.27 DecimalFormat.java
--- java/text/DecimalFormat.java	25 Nov 2006 18:20:54 -	1.27
+++ java/text/DecimalFormat.java	27 Nov 2006 02:42:20 -
@@ -1650,7 +1650,7 @@
 currencySymbol = CURRENCY_SYMBOL;
 
 // if \u00A4 is doubled, we use the international currency symbol
-if (i  len  pattern.charAt(i + 1) == '\u00A4')
+if ((i + 1)  len  pattern.charAt(i + 1) == '\u00A4')
   {
 currencySymbol = symbols.getInternationalCurrencySymbol();
 i = i + 2;
@@ -1728,6 +1728,15 @@
   private void formatInternal(BigDecimal number, boolean isLong,
   StringBuffer dest, FieldPosition fieldPos)
   {
+// The specs says that fieldPos should not be null, and that we
+// should throw a NPE, but it seems that in few classes that
+// reference this one, fieldPos is set to null.
+// This is even defined in the javadoc, see for example MessageFormat.
+// I think the best here is to check for fieldPos and build one if it is
+// null. If it cause harms or regressions, just remove this line and
+// fix the classes in the point of call, insted.
+if (fieldPos == null) fieldPos = new FieldPosition(0); 
+
 int _multiplier = this.multiplier;
 
 // used to track attribute starting position for each attribute
@@ -1853,7 +1862,7 @@
 // the sum of the minimum integer and maximum fraction
 // digits, and does not take into account the maximun integer
 // digits to display.
-// This methods takes care of the integer portion of the mantissa.
+
 if (attributeStart  0)
   attributeStart = Math.max(dest.length() - 1, 0);
 appendDigit(intPart, dest, this.groupingUsed);
@@ -1916,10 +1925,33 @@
   }
 
 fractPart = adjustTrailingZeros(fractPart, digits);
-appendDigit(fractPart, dest, false);
 
-endIndexFract = dest.length();
-addAttribute(Field.FRACTION, attributeStart, endIndexFract);
+// FIXME: this code must be improved
+// now check if the factional part is just 0, in this case
+// we need to remove the '.' unless requested
+boolean allZeros = true;
+char fracts[] = fractPart.toCharArray();
+for (int i = 0; i  fracts.length; i++)
+  {
+if (fracts[i] != '0')
+  allZeros = false;
+  }
+
+if (!allZeros || minimumFractionDigits  0)
+  {
+appendDigit(fractPart, dest, false);
+endIndexFract = dest.length();
+addAttribute(Field.FRACTION, attributeStart, endIndexFract);
+  }
+else if (!this.decimalSeparatorAlwaysShown)
+  {
+dest.deleteCharAt(dest.length() - 1);
+  }
+else
+  {
+endIndexFract = dest.length();
+

FYI: few DecimalFormat fixes

2006-11-26 Thread Mario Torre
Il giorno dom, 26/11/2006 alle 21.06 +0100, Mark Wielaard ha scritto:

 - java.sql.Timestamp.TimestampTest
 - java.text.MessageFormat.format
 - java.text.MessageFormat.parse
 - java.text.NumberFormat.UK
 - locales.LocaleTest
 
 These all seem to be caused by the last Decimal/NumberFormat patch. We
 get a couple of new passes back for it, but it would be good to
 investigate these failures.
 
 - javax.swing.JSpinner.DefaultEditor.propertyChange
 - javax.swing.JSpinner.DefaultEditor.stateChanged
 
 Similar. Both have checks fail like:
   FAIL:  line 49: (PropertyChangeEvent) [3] -- got 88.0 but expected 88
   FAIL:  line 46: (ChangeEvent) [3] -- got 99.0 but expected 99

I've fixed some of them. There are a couple of them difficult to find,
though.

In one case the specs defines two mutually exclusives scenarios :)

They say (Format) that pos should not be null, or an NPE would be
generated, but then, in MessageFormat, let pass this example in one of
the methods:

format(argument, new StringBuffer(), null);
^^
:)

I've fixed this, though we now check in DecimalFormat for null, which is
not really correct.

I'll search for the other failures tomorrow.

Mario

2006-11-27  neugens  [EMAIL PROTECTED]

* java/text/DecimalFormat.java (formatInternal): Add an explicit test
for FieldPosition to be null.
Check if the factional part is just 0 and can be omitted from the
result.
(scanNegativePattern): Fixed index out of bound exception when
searching
for international currency symbol in negative pattern.

-- 
Lima Software, SO.PR.IND. s.r.l.
http://www.limasoftware.net/
pgp key: http://subkeys.pgp.net/

Please, support open standards:
http://opendocumentfellowship.org/petition/
http://www.nosoftwarepatents.com/
### Eclipse Workspace Patch 1.0
#P classpath
Index: java/text/DecimalFormat.java
===
RCS file: /cvsroot/classpath/classpath/java/text/DecimalFormat.java,v
retrieving revision 1.27
diff -u -r1.27 DecimalFormat.java
--- java/text/DecimalFormat.java	25 Nov 2006 18:20:54 -	1.27
+++ java/text/DecimalFormat.java	27 Nov 2006 02:42:20 -
@@ -1650,7 +1650,7 @@
 currencySymbol = CURRENCY_SYMBOL;
 
 // if \u00A4 is doubled, we use the international currency symbol
-if (i  len  pattern.charAt(i + 1) == '\u00A4')
+if ((i + 1)  len  pattern.charAt(i + 1) == '\u00A4')
   {
 currencySymbol = symbols.getInternationalCurrencySymbol();
 i = i + 2;
@@ -1728,6 +1728,15 @@
   private void formatInternal(BigDecimal number, boolean isLong,
   StringBuffer dest, FieldPosition fieldPos)
   {
+// The specs says that fieldPos should not be null, and that we
+// should throw a NPE, but it seems that in few classes that
+// reference this one, fieldPos is set to null.
+// This is even defined in the javadoc, see for example MessageFormat.
+// I think the best here is to check for fieldPos and build one if it is
+// null. If it cause harms or regressions, just remove this line and
+// fix the classes in the point of call, insted.
+if (fieldPos == null) fieldPos = new FieldPosition(0); 
+
 int _multiplier = this.multiplier;
 
 // used to track attribute starting position for each attribute
@@ -1853,7 +1862,7 @@
 // the sum of the minimum integer and maximum fraction
 // digits, and does not take into account the maximun integer
 // digits to display.
-// This methods takes care of the integer portion of the mantissa.
+
 if (attributeStart  0)
   attributeStart = Math.max(dest.length() - 1, 0);
 appendDigit(intPart, dest, this.groupingUsed);
@@ -1916,10 +1925,33 @@
   }
 
 fractPart = adjustTrailingZeros(fractPart, digits);
-appendDigit(fractPart, dest, false);
 
-endIndexFract = dest.length();
-addAttribute(Field.FRACTION, attributeStart, endIndexFract);
+// FIXME: this code must be improved
+// now check if the factional part is just 0, in this case
+// we need to remove the '.' unless requested
+boolean allZeros = true;
+char fracts[] = fractPart.toCharArray();
+for (int i = 0; i  fracts.length; i++)
+  {
+if (fracts[i] != '0')
+  allZeros = false;
+  }
+
+if (!allZeros || minimumFractionDigits  0)
+  {
+appendDigit(fractPart, dest, false);
+endIndexFract = dest.length();
+addAttribute(Field.FRACTION, attributeStart, endIndexFract);
+  }
+else if (!this.decimalSeparatorAlwaysShown)
+  {
+dest.deleteCharAt(dest.length() - 1);
+  }
+else
+  {
+endIndexFract = dest.length();
+