Author: schor
Date: Wed Jul 25 15:31:09 2018
New Revision: 1836641

URL: http://svn.apache.org/viewvc?rev=1836641&view=rev
Log:
[UIMA-5844] fix select, rename getArray to getArrayList for iterators, change 
the definition to start from current position, and use the iterator itself.

Modified:
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FSIterator.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FilteredIterator.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_backwards.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_limited.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_multiple_indexes.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted2.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_singletype.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator_empty.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsTest.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/rb_trees/IntArrayRBTtest.java

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FSIterator.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FSIterator.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FSIterator.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FSIterator.java
 Wed Jul 25 15:31:09 2018
@@ -316,7 +316,10 @@ public interface FSIterator<T extends Fe
 
   /**
    * return the size of the collection being iterated over, if available.
-   * This may be inefficient to compute
+   * Because the iterator can move forwards and backwards, the size is the 
+   * total size that the iterator would iterate over, starting at the first 
element
+   * thru the last element.
+   * This may be inefficient to compute.
    * @return the size of the collection being iterated over.
    */
   default int size() {

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FilteredIterator.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FilteredIterator.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FilteredIterator.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FilteredIterator.java
 Wed Jul 25 15:31:09 2018
@@ -104,7 +104,7 @@ class FilteredIterator<T extends Feature
   /**
    * @see org.apache.uima.cas.FSIterator#copy()
    */
-  public FSIterator<T> copy() {
+  public FilteredIterator<T> copy() {
     return new FilteredIterator<T>(this.it.copy(), this.cons);
   }
 
@@ -164,17 +164,6 @@ class FilteredIterator<T extends Feature
     return count;
   }
 
-  @Override
-  public T[] getArray(Class<? super T> clazz) {
-    FilteredIterator<T> it2 = new FilteredIterator<T>(it, cons);
-    ArrayList<FeatureStructure> items = new ArrayList<>();
-    while (it2.hasNext()) {
-      items.add(it2.nextNvc());
-    }
-    T[] r = (T[]) Array.newInstance(clazz, items.size());
-    return items.toArray(r);
-  }
-
 //  /* (non-Javadoc)
 //   * @see 
org.apache.uima.cas.impl.FSIteratorImplBase#moveTo(java.util.Comparator)
 //   */

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_backwards.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_backwards.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_backwards.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_backwards.java
 Wed Jul 25 15:31:09 2018
@@ -36,7 +36,7 @@ class FsIterator_backwards<T extends Fea
     
   FsIterator_backwards(FSIterator<T> iterator) {
     this.it = (LowLevelIterator<T>) iterator;
-    it.moveToLast();
+    it.moveToLast();  // will act like move to first
   }
 
   @Override
@@ -145,18 +145,4 @@ class FsIterator_backwards<T extends Fea
     return it.size();
   }
 
-  @Override
-  public T[] getArray(Class<? super T> clazz) {
-    T[] a = it.getArray(clazz);
-    int len = a.length;
-    int len2 = len >> 1;
-    int len1 = len - 1;
-    for (int i = 0, i2 = len1; i < len2; i++, i2--) {
-      T t = a[i];
-      a[i] = a[i2];
-      a[i2] = t;
-    }
-    return a;
-  }
-
 }

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java
 Wed Jul 25 15:31:09 2018
@@ -20,6 +20,7 @@
 package org.apache.uima.cas.impl;
 
 import java.lang.reflect.Array;
+import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -185,12 +186,6 @@ class FsIterator_bag<T extends FeatureSt
     return null;  // not used for bag
   }
 
-  @Override
-  public T[] getArray(Class<? super T> clazz) {
-    T[] a = (T[]) Array.newInstance(clazz, size());
-    bag.copyToArray(a, 0);
-    return a;
-  }
   
 }
 

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_limited.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_limited.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_limited.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_limited.java
 Wed Jul 25 15:31:09 2018
@@ -141,14 +141,4 @@ class FsIterator_limited<T extends Featu
   public int size() {
     return Math.min(limit, iterator.size());
   }
-
-  @Override
-  public T[] getArray(Class<? super T> clazz) {
-    T[] a = iterator.getArray(clazz);
-    if (a.length > limit) {
-      return Arrays.copyOf(a,  limit);
-    }
-    return a;
-  }
-
 }

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_multiple_indexes.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_multiple_indexes.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_multiple_indexes.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_multiple_indexes.java
 Wed Jul 25 15:31:09 2018
@@ -192,18 +192,5 @@ public abstract class FsIterator_multipl
                 ? main_idx 
                 : ((LowLevelIterator<T>)allIterators[0]).ll_getIndex());
   }  
-  
-  @Override
-  public T[] getArray(Class<? super T> clazz) {
-    T[] a = (T[]) Array.newInstance(clazz, size());
-    int destPos = 0;
-    for (LowLevelIterator<T> it : nonEmptyIterators) {
-      T[] p = it.getArray(clazz);
-      System.arraycopy(p, 0, a, destPos, p.length);
-      destPos += p.length;
-    }
-    return a;
-  }
-
 
 }

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted2.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted2.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted2.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted2.java
 Wed Jul 25 15:31:09 2018
@@ -20,6 +20,7 @@
 package org.apache.uima.cas.impl;
 
 import java.lang.reflect.Array;
+import java.util.ArrayList;
 import java.util.Comparator;
 
 import org.apache.uima.cas.FeatureStructure;
@@ -300,13 +301,6 @@ class FsIterator_set_sorted2<T extends F
     return this.ll_getIndex().isSorted();
   }
 
-  @Override
-  public T[] getArray(Class<? super T> clazz) {
-    T[] a = (T[]) Array.newInstance(clazz, size());
-    this.ofsa.copyToArray(a, 0);
-    return a;
-  }
-
 //  @Override
 //  protected int getModificationCountFromIndex() {
 //    return ofsa.getModificationCount();

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_singletype.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_singletype.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_singletype.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_singletype.java
 Wed Jul 25 15:31:09 2018
@@ -19,6 +19,8 @@
 
 package org.apache.uima.cas.impl;
 
+import java.util.ArrayList;
+
 import org.apache.uima.cas.FeatureStructure;
 import org.apache.uima.cas.Type;
 

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java
 Wed Jul 25 15:31:09 2018
@@ -259,12 +259,5 @@ public class FsIterator_subtypes_snapsho
   @Override
   public Comparator<TOP> getComparator() {
     return comparatorMaybeNoTypeWithoutId;
-  }
-
-
-  @Override
-  public T[] getArray(Class<? super T> clazz) {
-    return snapshot;
-  }  
- 
+  } 
 }

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java
 Wed Jul 25 15:31:09 2018
@@ -19,6 +19,7 @@
 
 package org.apache.uima.cas.impl;
 
+import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.NoSuchElementException;
 
@@ -173,11 +174,15 @@ public interface LowLevelIterator<T exte
   default boolean isMoveToSupported() { return false; }
 
   /**
-   * @return an array representing the collection of items the iterator would 
return
+   * @param arrayList updated by adding elements representing the collection 
of items the iterator would return
+   * from its current position to the end
+   * 
+   * NOTE: This operation will move the iterator from its current position to 
the end.
    */
-  default  T[] getArray(Class<? super T> clazz) { 
-    throw new UnsupportedOperationException();
+  default void getArrayList(ArrayList<? super T> arrayList) {
+    while (isValid()) {
+      arrayList.add(nextNvc());
+    }
   }
-  
 
 }

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator_empty.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator_empty.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator_empty.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator_empty.java
 Wed Jul 25 15:31:09 2018
@@ -62,7 +62,5 @@ public class LowLevelIterator_empty<T ex
   @Override
   public Comparator<TOP> getComparator() { return null; }
   @Override
-  public T[] getArray(Class<? super T> clazz) { return (T[]) 
Array.newInstance(clazz, 0); }
-  @Override
   public Type getType() { return TypeSystemImpl.staticTsi.getTopType(); }
 }

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
 Wed Jul 25 15:31:09 2018
@@ -567,21 +567,9 @@ public class SelectFSs_impl <T extends F
   }
   
   private void incr(FSIterator<T> it) {
-    if (isBackwards) {
-      it.moveToPrevious();
-    } else {
-      it.moveToNext();
-    }
+    it.moveToNext();    
   }
   
-//  private void decr(FSIterator<T> it) {
-//    if (isBackwards) {
-//      it.moveToNext();
-//    } else {
-//      it.moveToPrevious();
-//    }
-//  }
-//  
   /*********************************
    * terminal operations
    * returning other than SelectFSs
@@ -626,8 +614,7 @@ public class SelectFSs_impl <T extends F
     
     if (isPreceding) {
       boolean bkwd = isBackwards;   // save isBackwards flag.  
-                                    // since preceding normally operates 
backwards, if this flag is set
-                                    // the user wants to operate "forwards"
+                                    
       isBackwards = true;   // because need the iterator to move from the 
position to the front.
       return make_or_copy_snapshot(fsIterator1(), bkwd);  // this iterator 
fails to skip annotations whose end is > positioning begin
 //      LowLevelIterator<T> baseIterator = fsIterator1();  // this iterator 
fails to skip annotations whose end is > positioning begin
@@ -678,8 +665,8 @@ public class SelectFSs_impl <T extends F
                       : plainFsIterator(index, view);
 
     it = maybeWrapBackwards(it);                  
-    maybePosition(it);
-    maybeShift(it);
+    maybePosition(it);  // position needs to come after backwards because that 
sets the position
+    maybeShift(it);     // shift semantically needs to come after backwards
     return (limit == -1) ? it : new FsIterator_limited<>(it, limit);    
   }
   
@@ -803,8 +790,8 @@ public class SelectFSs_impl <T extends F
   
   private LowLevelIterator<T> maybeWrapBackwards(LowLevelIterator<T> it) {
     if (isBackwards) {
-      it = new FsIterator_backwards<>(it);
-      it.moveToFirst();
+      it = new FsIterator_backwards<>(it);  // positions the underlying 
iterator to last,
+                                            // which is first for going 
backwards
     }
     return it;
   }
@@ -877,23 +864,14 @@ public class SelectFSs_impl <T extends F
    * 
    */
   @Override
-  public List<T> asList() {
- 
-    return new AbstractList<T>() {
-      
-      private final T[] a = asArray((LowLevelIterator<T>) fsIterator());
-      
-      @Override
-      public T get(int i) {
-        return a[i];
-      }
-
-      @Override
-      public int size() {
-        return a.length;
-      }
-    };
-     
+  public ArrayList<T> asList() {
+    return asArrayList((LowLevelIterator<T>) fsIterator());
+  }
+  
+  private ArrayList<T> asArrayList(LowLevelIterator<T> it) {
+    ArrayList<T> al = new ArrayList<>();
+    it.getArrayList(al);
+    return al;
   }
   
   /* (non-Javadoc)
@@ -904,13 +882,26 @@ public class SelectFSs_impl <T extends F
     return asArray((LowLevelIterator<T>)fsIterator(), clazz);
   }
   
+  /**
+   * This is a terminal operation, so can use/modify the original iterator
+   * @param it the iterator positioned at the start position
+   * @param clazz the class of the result
+   * @return an array of elements from the position to the end
+   */
   private T[] asArray(LowLevelIterator<T> it, Class<? super T> clazz) {
-    return ((LowLevelIterator<T>)it).getArray(clazz);
-  }
+    // can't use the iterator's getArray method, because that returns the 
entire 
+    // array, starting from the first position thru the last position,
+    // and the iterator might have been positioned other than the starting spot
+    // by a following or startAt etc.
     
-  private T[] asArray(LowLevelIterator<T> it) {
-    return asArray(it, (Class<? super T>) ((TypeImpl)it.getType()).javaClass);
+    ArrayList<T> a = asArrayList(it);
+    T[] r = (T[]) Array.newInstance(clazz, a.size());
+    return a.toArray(r);
   }
+    
+//  private T[] asArray(LowLevelIterator<T> it) {
+//    return asArray(it, (Class<? super T>) 
((TypeImpl)it.getType()).javaClass);
+//  }
   
 
   private Annotation makePosAnnot(int begin, int end) {

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java
 Wed Jul 25 15:31:09 2018
@@ -1265,18 +1265,6 @@ public class Subiterator<T extends Annot
     return sz;
   }
 
-  @Override
-  public T[] getArray(Class<? super T> clazz) {
-    FSIterator<T> it2 = copy();
-    it2.moveToFirst();
-    ArrayList<FeatureStructure> a = new ArrayList<>();
-    while (it2.hasNext()) {
-      a.add(it2.nextNvc());
-    }
-    T[] r = (T[]) Array.newInstance(clazz, a.size());
-    return a.toArray(r);
-  }
-
 //  /**
 //   * Simple implementation:
 //   *   move to leftmost, then

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsTest.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsTest.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsTest.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsTest.java
 Wed Jul 25 15:31:09 2018
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertFal
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
+import java.lang.reflect.Array;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
@@ -177,4 +178,46 @@ public class SelectFsTest  {
     assertTrue(jcas.select(Token.class).isEmpty());
     
   }
+  
+  @Test
+  public void testSelectFollowingPrecedingDifferentTypes() {
+    
+    JCas jCas = cas.getJCas();
+    jCas.setDocumentText("A B C D E");
+    Token a = new Token(jCas, 0, 1);
+    Token b = new Token(jCas, 2, 3);
+    Token c = new Token(jCas, 4, 5);
+    Token d = new Token(jCas, 6, 7);
+    Token e = new Token(jCas, 8, 9);
+    for (Token token : Arrays.asList(a, b, c, d, e)) {
+      token.addToIndexes();
+    }
+    Sentence sentence = new Sentence(jCas, 2, 5);
+    sentence.addToIndexes();
+
+    // uimaFIT: selectFollowing(this.jCas, Token.class, sentence, 1);
+    
+    List<Token> following1 = 
jCas.select(Token.class).following(sentence).limit(1).asList();
+//    assertEquals(Arrays.asList("D"), JCasUtil.toText(following1));
+    assertEquals(Arrays.asList(d), following1);
+    
+    Sentence s2 = new Sentence(jCas, 4, 5);
+    Token[] prec1 = 
jCas.select(Token.class).preceding(s2).asArray(Token.class);
+    assertEquals(2, prec1.length);
+    assertTrue(Arrays.equals(new Token[] {a, b}, prec1));
+    
+    List<Token> prec2 
=jCas.select(Token.class).preceding(s2).backwards().asList();
+    assertEquals(Arrays.asList(b, a), prec2);
+
+    prec2 
=jCas.select(Token.class).preceding(s2).backwards().shifted(1).asList();
+    assertEquals(Arrays.asList(a), prec2);
+
+    prec2 =jCas.select(Token.class).following(sentence).shifted(1).asList();
+    assertEquals(Arrays.asList(e), prec2);
+
+    prec2 =jCas.select(Token.class).following(sentence).shifted(-1).asList();
+    assertEquals(Arrays.asList(c, d, e), prec2);
+
+
+  }
 }

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/rb_trees/IntArrayRBTtest.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/rb_trees/IntArrayRBTtest.java?rev=1836641&r1=1836640&r2=1836641&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/rb_trees/IntArrayRBTtest.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/rb_trees/IntArrayRBTtest.java
 Wed Jul 25 15:31:09 2018
@@ -31,7 +31,7 @@ public class IntArrayRBTtest extends Tes
   private final static int NIL = 0;
   static final Random rand = new Random();    
   static {  
-//     long seed = -585739628489294672L;
+//     long seed = 7853174522311867210L;
      long seed = rand.nextLong();
      rand.setSeed(seed);
      System.out.println("IntArrayRBTtest seed is " + seed);


Reply via email to