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};