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 < 0 or index > 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>