Pushed the fix, thanks for the spot!
Stephen

On 6 December 2011 11:20, Greg Inozemtsev <g...@nzmsv.com> wrote:
> I noticed that the testForFields4 test method in TestPeriodType was
> failing when running independently, so I decided to investigate.
>
> The current cache implementation in PeriodType fails if the PeriodType
> object with fields out-of-order is added first.  This is because the
> object with fields out of order is added to the cache, but
> PeriodType.equals expects the fields to be in order (as it is using
> Arrays.equals).  The next object then falsely misses in the cache.
> The fix is to cache a PeriodType object with fields in order.
>
> This bug was not picked up by tests because the testForFields3 method
> was running first and adding an object with the fields in the correct
> order to the cache.  Therefore, I also made a change to testForFields4
> to make it independent from testForFields3.
>
> Thanks for the work on joda-time!
>
> PS. Most of the credit goes to my wife (Laura Inozemtseva) for
> catching the test case failure and troubleshooting.
>
>
>
> diff -urp joda-time-2.0.orig/src/main/java/org/joda/time/PeriodType.java
> joda-time-2.0/src/main/java/org/joda/time/PeriodType.java
> --- joda-time-2.0.orig/src/main/java/org/joda/time/PeriodType.java      
> 2011-12-06
> 01:56:23.406957436 -0500
> +++ joda-time-2.0/src/main/java/org/joda/time/PeriodType.java   2011-12-06
> 06:01:15.725820494 -0500
> @@ -569,10 +569,10 @@ public class PeriodType implements Seria
>         PeriodType checkPartType = new PeriodType(null, type.iTypes, null);
>         PeriodType checkedType = (PeriodType) cache.get(checkPartType);
>         if (checkedType != null) {
> -            cache.put(inPartType, checkedType);
> +            cache.put(checkPartType, checkedType);
>             return checkedType;
>         }
> -        cache.put(inPartType, type);
> +        cache.put(checkPartType, type);
>         return type;
>     }
>
> diff -urp joda-time-2.0.orig/src/test/java/org/joda/time/TestPeriodType.java
> joda-time-2.0/src/test/java/org/joda/time/TestPeriodType.java
> --- joda-time-2.0.orig/src/test/java/org/joda/time/TestPeriodType.java  
> 2011-12-06
> 01:56:23.390957347 -0500
> +++ joda-time-2.0/src/test/java/org/joda/time/TestPeriodType.java       
> 2011-12-06
> 06:00:05.321471377 -0500
> @@ -522,12 +522,12 @@ public class TestPeriodType extends Test
>
>     public void testForFields4() throws Exception {
>         DurationFieldType[] types = new DurationFieldType[] {
> -            DurationFieldType.weeks(),
> +            DurationFieldType.days(),
>             DurationFieldType.months(),
>         };
>         DurationFieldType[] types2 = new DurationFieldType[] {
>             DurationFieldType.months(),
> -            DurationFieldType.weeks(),
> +            DurationFieldType.days(),
>         };
>         PeriodType type = PeriodType.forFields(types);
>         PeriodType type2 = PeriodType.forFields(types2);
>
> ------------------------------------------------------------------------------
> Cloud Services Checklist: Pricing and Packaging Optimization
> This white paper is intended to serve as a reference, checklist and point of
> discussion for anyone considering optimizing the pricing and packaging model
> of a cloud services business. Read Now!
> http://www.accelacomm.com/jaw/sfnl/114/51491232/
> _______________________________________________
> Joda-interest mailing list
> Joda-interest@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/joda-interest

------------------------------------------------------------------------------
Cloud Services Checklist: Pricing and Packaging Optimization
This white paper is intended to serve as a reference, checklist and point of 
discussion for anyone considering optimizing the pricing and packaging model 
of a cloud services business. Read Now!
http://www.accelacomm.com/jaw/sfnl/114/51491232/
_______________________________________________
Joda-interest mailing list
Joda-interest@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/joda-interest

Reply via email to