You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2014/02/06 22:28:52 UTC
svn commit: r1565445 - in /uima/uimaj/trunk/uimaj-core/src:
main/java/org/apache/uima/internal/util/IntVector.java
test/java/org/apache/uima/internal/util/IntVectorTest.java
Author: schor
Date: Thu Feb 6 21:28:52 2014
New Revision: 1565445
URL: http://svn.apache.org/r1565445
Log:
[UIMA-3603] fix edge case for 0 length vector in sortDedup in IntVector, add tests
Modified:
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntVector.java
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/IntVectorTest.java
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntVector.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntVector.java?rev=1565445&r1=1565444&r2=1565445&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntVector.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntVector.java Thu Feb 6 21:28:52 2014
@@ -316,6 +316,9 @@ public class IntVector implements Serial
* @return an updated value for this vector, with the values sorted and duplicates removed
*/
public IntVector sortDedup() {
+ if (pos == 0) {
+ return this; // handle empty edge case https://issues.apache.org/jira/browse/UIMA-3603
+ }
Arrays.sort(array, 0, pos);
int prev = array[0];
int cpyfromIndex = 1;
@@ -331,7 +334,9 @@ public class IntVector implements Serial
}
// copyfromIndex == 1 past end or the index of first duplicate
- cpytoIndex = cpyfromIndex ++;
+ cpytoIndex = cpyfromIndex ++;
+ // now cpytoIndex = 1 past end or index of 1st duplicate,
+ // cpyfromIndex is one beyond that (next one to check)
for (; cpyfromIndex < pos; ) {
final int v = array[cpyfromIndex++];
Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/IntVectorTest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/IntVectorTest.java?rev=1565445&r1=1565444&r2=1565445&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/IntVectorTest.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/IntVectorTest.java Thu Feb 6 21:28:52 2014
@@ -43,6 +43,21 @@ public class IntVectorTest extends TestC
iv.sortDedup();
assertTrue(Arrays.equals(iv.toArray(), new int[] {2, 3, 4, 5, 6, 7, 8, 9}));
+ // check 3 edge cases: no dups, and last 2 items are dups, and 0 length
+ iv = new IntVector();
+ iv.add(new int[] {1, 3, 5, 7});
+ iv.sortDedup();
+ assertTrue(Arrays.equals(iv.toArray(), new int[] {1, 3, 5, 7}));
+
+ iv = new IntVector();
+ iv.add(new int[] {1,3, 5, 7, 7});
+ iv.sortDedup();
+ assertTrue(Arrays.equals(iv.toArray(), new int[] {1, 3, 5, 7}));
+
+ iv = new IntVector();
+ iv.sortDedup();
+ assertTrue(Arrays.equals(iv.toArray(), new int[] {}));
+
}
// verify that several CASes in a pool in different views share the same type system