You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rw...@apache.org on 2003/01/13 23:52:35 UTC

cvs commit: jakarta-commons/collections/src/test/org/apache/commons/collections/comparators TestComparatorChain.java

rwaldhoff    2003/01/13 14:52:34

  Modified:    collections/src/java/org/apache/commons/collections/comparators
                        ComparatorChain.java TransformingComparator.java
               collections/src/test/org/apache/commons/collections/comparators
                        TestComparatorChain.java
  Log:
  * fix ComparatorChain for the case in which an underlying comparator returns Integer.MIN_VALUE, add test that demonstrates
  * minor javadocs
  
  Revision  Changes    Path
  1.10      +9 -5      jakarta-commons/collections/src/java/org/apache/commons/collections/comparators/ComparatorChain.java
  
  Index: ComparatorChain.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/comparators/ComparatorChain.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ComparatorChain.java	10 Jan 2003 20:21:25 -0000	1.9
  +++ ComparatorChain.java	13 Jan 2003 22:52:34 -0000	1.10
  @@ -98,7 +98,7 @@
   public class ComparatorChain implements Comparator,Serializable {
   
       protected List comparatorChain = null;
  -    // 0 = ascend; 1 = descend
  +    // false (clear) = ascend; true (set) = descend
       protected BitSet orderingBits = null;
   
       // ComparatorChain is "locked" after the first time
  @@ -206,7 +206,7 @@
        * @param index      index of the Comparator to replace
        * @param comparator Comparator to place at the given index
        * @exception IndexOutOfBoundsException
  -     *                   if index < 0 or index > size()
  +     *                   if index &lt; 0 or index &gt; size()
        */
       public void setComparator(int index, Comparator comparator) 
       throws IndexOutOfBoundsException {
  @@ -315,7 +315,11 @@
               if (retval != 0) {
                   // invert the order if it is a reverse sort
                   if (orderingBits.get(comparatorIndex) == true) {
  -                    retval *= -1;
  +                    if(Integer.MIN_VALUE == retval) {
  +                        retval = Integer.MAX_VALUE;
  +                    } else {                        
  +                        retval *= -1;
  +                    }
                   }
   
                   return retval;
  
  
  
  1.3       +17 -10    jakarta-commons/collections/src/java/org/apache/commons/collections/comparators/TransformingComparator.java
  
  Index: TransformingComparator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/comparators/TransformingComparator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TransformingComparator.java	16 Jun 2002 03:39:40 -0000	1.2
  +++ TransformingComparator.java	13 Jan 2003 22:52:34 -0000	1.3
  @@ -1,9 +1,9 @@
  -package org.apache.commons.collections.comparators;
  -
  -/* ====================================================================
  +/*
  + * $Header$ 
  + * ====================================================================
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2001 The Apache Software Foundation.  All rights
  + * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -53,6 +53,7 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    */
  +package org.apache.commons.collections.comparators;
   
   import java.util.Comparator;
   
  @@ -61,8 +62,12 @@
   /**
    * Decorates another Comparator with transformation behavior. That is, the
    * return value from the transform operation will be passed to the decorated
  - * <CODE>Comparator#compare</CODE> method.
  - * <p>
  + * {@link Comparator#compare compare} method.
  + * <p />
  + * 
  + * @since Commons Collections 2.0 (?)
  + * @version $Revision$ $Date$
  + * 
    * @see org.apache.commons.collections.Transformer
    * @see org.apache.commons.collections.comparators.ComparableComparator
    */
  @@ -72,8 +77,10 @@
       protected Transformer transformer;
   
       /**
  -     * Constructs an instance with the given Transformer and a ComparableComparator.
  -     * @param transformer what will transform the instance.
  +     * Constructs an instance with the given Transformer and a 
  +     * {@link ComparableComparator ComparableComparator}.
  +     * @param transformer what will transform the arguments to 
  +     *        {@link #compare compare}
        */
       public TransformingComparator(Transformer transformer)
       {
  @@ -82,8 +89,8 @@
   
       /**
        * Constructs an instance with the given Transformer and Comparator
  -     * @param decorated  the decorated Comparator
  -     * @param getterName    the getter name
  +     * @param transformer what will transform the arguments to {@link #compare compare}
  +     * @param decorated the decorated Comparator
        */
       public TransformingComparator(Transformer transformer, Comparator decorated)
       {
  
  
  
  1.5       +25 -1     jakarta-commons/collections/src/test/org/apache/commons/collections/comparators/TestComparatorChain.java
  
  Index: TestComparatorChain.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/comparators/TestComparatorChain.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TestComparatorChain.java	7 Jan 2003 23:44:20 -0000	1.4
  +++ TestComparatorChain.java	13 Jan 2003 22:52:34 -0000	1.5
  @@ -127,6 +127,30 @@
           }
       }
   
  +
  +    public void testComparatorChainOnMinvaluedCompatator() {
  +        // -1 * Integer.MIN_VALUE is less than 0,
  +        // test that ComparatorChain handles this edge case correctly
  +        ComparatorChain chain = new ComparatorChain();
  +        chain.addComparator(
  +            new Comparator() {
  +                public int compare(Object a, Object b) {
  +                    int result = ((Comparable)a).compareTo(b);
  +                    if(result < 0) {
  +                        return Integer.MIN_VALUE;
  +                    } else if(result > 0) {
  +                        return Integer.MAX_VALUE;
  +                    } else {
  +                        return 0;
  +                    }
  +                }
  +            }, true);
  +
  +        assertTrue(chain.compare(new Integer(4), new Integer(5)) > 0);            
  +        assertTrue(chain.compare(new Integer(5), new Integer(4)) < 0);            
  +        assertTrue(chain.compare(new Integer(4), new Integer(4)) == 0);            
  +    }
  +
       public List getComparableObjectsOrdered() {
           List list = new LinkedList();
           // this is the correct order assuming a
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>