Author: schor
Date: Wed May 22 14:30:40 2013
New Revision: 1485226

URL: http://svn.apache.org/r1485226
Log:
[UIMA-2934] updated test case to verify removing item not in index doesn't 
cause failure.

Modified:
    
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIntArrayIndex.java
    
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/IteratorTest.java

Modified: 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIntArrayIndex.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIntArrayIndex.java?rev=1485226&r1=1485225&r2=1485226&view=diff
==============================================================================
--- 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIntArrayIndex.java
 (original)
+++ 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIntArrayIndex.java
 Wed May 22 14:30:40 2013
@@ -250,6 +250,7 @@ public class FSIntArrayIndex<T extends F
   // }
 
   // Do binary search on index.
+  // return negative number of insertion point if not found
   private final int binarySearch(int[] array, int ele, int start, int end) {
     --end; // Make end a legal value.
     int i; // Current position
@@ -355,8 +356,26 @@ public class FSIntArrayIndex<T extends F
 //    }
   }
 
+  
+  /*
+   * Some day we may want to remove all occurrances of this feature structure, 
not just the
+   * first one we come to (in the case where the exact identical FS has been 
added to the 
+   * index multiple times).  The issues around this are:
+   *   multiple adds are lost on serialization/ deserialization
+   *   it take time to remove all instances - especially from bag indexes
+   */
+  
+  /**
+   * This code is written to remove (if it exists)
+   * the exact FS, not just one which matches in the sort comparator.
+   * 
+   *   
+   */
   public void remove(int fsRef) {
     final int pos = find(fsRef);  // finds "same" element per compare key
+    if (pos < 0) {
+      return;  // not in index
+    }
     if (this.index.get(pos) == fsRef) {
       this.index.remove(pos);
       return;

Modified: 
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/IteratorTest.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/IteratorTest.java?rev=1485226&r1=1485225&r2=1485226&view=diff
==============================================================================
--- 
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/IteratorTest.java
 (original)
+++ 
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/IteratorTest.java
 Wed May 22 14:30:40 2013
@@ -175,7 +175,7 @@ public class IteratorTest extends TestCa
     this.sentenceType = null;
     this.annotationType = null;
   }
-
+  
   public void testGetIndexes() {
     Iterator<FSIndex<FeatureStructure>> it = 
this.cas.getIndexRepository().getIndexes();
     while (it.hasNext()) {
@@ -730,6 +730,7 @@ public class IteratorTest extends TestCa
     // different FS.
     for (int i = 0; i < fsArray.length; i++) {
       ir.removeFS(fsArray[i]);
+      ir.removeFS(fsArray[i]);  // a 2nd remove should be a no-op 
https://issues.apache.org/jira/browse/UIMA-2934
       setIt.moveTo(fsArray[i]);
       if (setIt.isValid()) {
         int oldRef = this.cas.ll_getFSRef(fsArray[i]);
@@ -808,12 +809,12 @@ public class IteratorTest extends TestCa
     verifyMoveToFirst(subsortedIt, true);
     
     ir.removeAllIncludingSubtypes(sentenceType);
-    verifyConcMod(setIt);
-    verifyConcMod(bagIt);
-    verifyConcMod(sortedIt);
-    verifyConcMod(subsetIt);
-    verifyConcMod(subbagIt);
-    verifyConcMod(subsortedIt);
+    verifyConcurrantModificationDetected(setIt);
+    verifyConcurrantModificationDetected(bagIt);
+    verifyConcurrantModificationDetected(sortedIt);
+    verifyConcurrantModificationDetected(subsetIt);
+    verifyConcurrantModificationDetected(subbagIt);
+    verifyConcurrantModificationDetected(subsortedIt);
 
     verifyMoveToFirst(setIt, false);
     verifyMoveToFirst(bagIt, false);
@@ -859,8 +860,8 @@ public class IteratorTest extends TestCa
     verifyMoveToFirst(subsortedIt, false);
   }
   
-
-  private void verifyConcMod(FSIterator<?> it) {
+  
+  private void verifyConcurrantModificationDetected(FSIterator<?> it) {
     boolean caught = false;
     try {
       it.moveToNext();


Reply via email to