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 2015/02/27 20:12:49 UTC

svn commit: r1662800 - in /uima/uimaj/trunk/uimaj-core/src: main/java/org/apache/uima/internal/util/rb_trees/ test/java/org/apache/uima/internal/util/rb_trees/

Author: schor
Date: Fri Feb 27 19:12:48 2015
New Revision: 1662800

URL: http://svn.apache.org/r1662800
Log:
[UIMA-4267] fix bad logic in space management of values in Int2IntRBT impl.

Modified:
    uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/Int2IntRBT.java
    uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntArrayRBTcommon.java
    uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/rb_trees/Int2IntRBTtest.java

Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/Int2IntRBT.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/Int2IntRBT.java?rev=1662800&r1=1662799&r2=1662800&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/Int2IntRBT.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/Int2IntRBT.java Fri Feb 27 19:12:48 2015
@@ -236,14 +236,16 @@ public class Int2IntRBT extends IntArray
     lastNodeGotten = NIL;
   }
   
-  protected void ensureCapacity(int requiredSize) {
-    super.ensureCapacity(requiredSize);
+  @Override
+  protected void ensureCapacityKlrp(int requiredSize) {
+    super.ensureCapacityKlrp(requiredSize);
     this.values = ensureArrayCapacity(this.values, requiredSize);
   }
   
   /**
    * 
-   * @param k
+   * @param k the key to insert
+   * @param v the value to insert (or replace, if key already present)
    * @return negative index if key is found
    */
   private int treeInsert(final int k, final int v) {

Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntArrayRBTcommon.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntArrayRBTcommon.java?rev=1662800&r1=1662799&r2=1662800&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntArrayRBTcommon.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntArrayRBTcommon.java Fri Feb 27 19:12:48 2015
@@ -350,7 +350,7 @@ public class IntArrayRBTcommon {
   }
   
   protected int newNode(final int k) {
-    // Make sure the tree is big enough to accomodate a new node.
+    // Make sure the tree is big enough to accommodate a new node.
 
     if (useklrp) {
       int lenKlrp = (klrp.length >> 2);
@@ -366,15 +366,15 @@ public class IntArrayRBTcommon {
       if (this.next >= lenKlrp) {
         ensureCapacityKlrp(this.next + 1);
       }
+    } else {
+      // not using klrp format
+      ensureCapacityNotKrlp(this.next + 1);
     }
     
     if (this.next >= this.color.length){
-      if (!useklrp) {
-        ensureCapacityNotKrlp(this.next + 1);
-      }
-      ensureCapacity(this.next + 1);
+      this.color = ensureBooleanArraySize(this.color, this.next + 1);        
     }
-
+    
     // assert(key.length > next);
     final int z = this.next;
     ++this.next;

Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/rb_trees/Int2IntRBTtest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/rb_trees/Int2IntRBTtest.java?rev=1662800&r1=1662799&r2=1662800&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/rb_trees/Int2IntRBTtest.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/rb_trees/Int2IntRBTtest.java Fri Feb 27 19:12:48 2015
@@ -30,6 +30,28 @@ import org.apache.uima.internal.util.Int
 import org.apache.uima.internal.util.IntListIterator;
 
 public class Int2IntRBTtest extends TestCase {
+  
+  public void testexpand() {
+    Int2IntRBT ia = new Int2IntRBT();
+    
+    int shiftpoint = 1 + (1 << 30);
+    shiftpoint = 1040;  // bigger than 1024, to get 1 realloc
+    shiftpoint = 6291500;  // bigger than the first observed outof bounds
+    
+    for (int i = 11; i < shiftpoint; i++) {
+//      if (i == 1034) {
+//        System.out.println("Debug");
+//      }
+      try {
+      ia.put(i,  i * 8);
+      } catch (ArrayIndexOutOfBoundsException e) {
+        System.err.format("%,d%n", i);
+        throw e;
+      }
+    }
+  }
+  
+  
   public void testIterator() {
     Int2IntRBT ia = new Int2IntRBT();
     Integer[] vs = new Integer[] {2, 2, 5, 1, 6, 7, 3, 4};