You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2013/01/09 20:31:24 UTC

svn commit: r1431019 - in /lucene/dev/trunk/lucene: CHANGES.txt core/src/java/org/apache/lucene/util/CharsRef.java core/src/test/org/apache/lucene/util/TestCharsRef.java

Author: rmuir
Date: Wed Jan  9 19:31:23 2013
New Revision: 1431019

URL: http://svn.apache.org/viewvc?rev=1431019&view=rev
Log:
LUCENE-4671: Fix CharsRef.subSequence method

Modified:
    lucene/dev/trunk/lucene/CHANGES.txt
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/CharsRef.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/TestCharsRef.java

Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1431019&r1=1431018&r2=1431019&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Wed Jan  9 19:31:23 2013
@@ -324,6 +324,8 @@ Bug Fixes
 
 * LUCENE-4662: Add missing elided articles and prepositions to FrenchAnalyzer's
   DEFAULT_ARTICLES list passed to ElisionFilter.  (David Leunen via Steve Rowe)
+
+* LUCENE-4671: Fix CharsRef.subSequence method.  (Tim Smith via Robert Muir)
     
 Changes in Runtime Behavior
   

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/CharsRef.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/CharsRef.java?rev=1431019&r1=1431018&r2=1431019&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/CharsRef.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/CharsRef.java Wed Jan  9 19:31:23 2013
@@ -218,7 +218,7 @@ public final class CharsRef implements C
     if (start < 0 || end > length || start > end) {
       throw new IndexOutOfBoundsException();
     }
-    return new CharsRef(chars, offset + start, offset + end);
+    return new CharsRef(chars, offset + start, end - start);
   }
   
   /** @deprecated This comparator is only a transition mechanism */

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/TestCharsRef.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/TestCharsRef.java?rev=1431019&r1=1431018&r2=1431019&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/TestCharsRef.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/TestCharsRef.java Wed Jan  9 19:31:23 2013
@@ -116,11 +116,28 @@ public class TestCharsRef extends Lucene
   }
   
   // LUCENE-3590: fix off-by-one in subsequence, and fully obey interface
+  // LUCENE-4671: fix subSequence
   public void testCharSequenceSubSequence() {
-    CharSequence c = new CharsRef("abc");
+    CharSequence sequences[] =  {
+        new CharsRef("abc"),
+        new CharsRef("0abc".toCharArray(), 1, 3),
+        new CharsRef("abc0".toCharArray(), 0, 3),
+        new CharsRef("0abc0".toCharArray(), 1, 3)
+    };
+    
+    for (CharSequence c : sequences) {
+      doTestSequence(c);
+    }
+  }
+    
+  private void doTestSequence(CharSequence c) {
     
     // slice
     assertEquals("a", c.subSequence(0, 1).toString());
+    // mid subsequence
+    assertEquals("b", c.subSequence(1, 2).toString());
+    // end subsequence
+    assertEquals("bc", c.subSequence(1, 3).toString());
     // empty subsequence
     assertEquals("", c.subSequence(0, 0).toString());