You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2008/02/05 15:02:33 UTC

svn commit: r618652 - in /lucene/java/trunk: CHANGES.txt src/java/org/apache/lucene/analysis/CharArraySet.java src/test/org/apache/lucene/analysis/TestCharArraySet.java

Author: mikemccand
Date: Tue Feb  5 06:02:32 2008
New Revision: 618652

URL: http://svn.apache.org/viewvc?rev=618652&view=rev
Log:
LUCENE-1163: get CharArraySet.contains(char[], int offset, int length) to actually pay attention to offset

Modified:
    lucene/java/trunk/CHANGES.txt
    lucene/java/trunk/src/java/org/apache/lucene/analysis/CharArraySet.java
    lucene/java/trunk/src/test/org/apache/lucene/analysis/TestCharArraySet.java

Modified: lucene/java/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?rev=618652&r1=618651&r2=618652&view=diff
==============================================================================
--- lucene/java/trunk/CHANGES.txt (original)
+++ lucene/java/trunk/CHANGES.txt Tue Feb  5 06:02:32 2008
@@ -40,6 +40,10 @@
     
  1. LUCENE-1134: Fixed BooleanQuery.rewrite to only optimze a single 
     clause query if minNumShouldMatch<=0. (Shai Erera via Michael Busch)
+
+ 2. LUCENE-1163: Fixed bug in CharArraySet.contains(char[] buffer, int
+    offset, int len) that was ignoring offset and thus giving the
+    wrong answer.  (Thomas Peuss via Mike McCandless)
 	
 New features
 

Modified: lucene/java/trunk/src/java/org/apache/lucene/analysis/CharArraySet.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/analysis/CharArraySet.java?rev=618652&r1=618651&r2=618652&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/analysis/CharArraySet.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/analysis/CharArraySet.java Tue Feb  5 06:02:32 2008
@@ -66,7 +66,7 @@
   }
 
   private int getSlot(char[] text, int off, int len) {
-    int code = getHashCode(text, len);
+    int code = getHashCode(text, off, len);
     int pos = code & (entries.length-1);
     char[] text2 = entries[pos];
     if (text2 != null && !equals(text, off, len, text2)) {
@@ -175,14 +175,15 @@
     }
   }
   
-  private int getHashCode(char[] text, int len) {
+  private int getHashCode(char[] text, int offset, int len) {
     int code = 0;
+    final int stop = offset + len;
     if (ignoreCase) {
-      for (int i=0; i<len; i++) {
+      for (int i=offset; i<stop; i++) {
         code = code*31 + Character.toLowerCase(text[i]);
       }
     } else {
-      for (int i=0; i<len; i++) {
+      for (int i=offset; i<stop; i++) {
         code = code*31 + text[i];
       }
     }

Modified: lucene/java/trunk/src/test/org/apache/lucene/analysis/TestCharArraySet.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/analysis/TestCharArraySet.java?rev=618652&r1=618651&r2=618652&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/analysis/TestCharArraySet.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/analysis/TestCharArraySet.java Tue Feb  5 06:02:32 2008
@@ -17,20 +17,27 @@
  * limitations under the License.
  */
 
-import java.io.IOException;
+import java.util.Arrays;
 
 import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.analysis.StopAnalyzer;
-import org.apache.lucene.analysis.CharArraySet;
 
 public class TestCharArraySet extends LuceneTestCase
 {
-    public void testRehash() throws Exception {
-      CharArraySet cas = new CharArraySet(0, true);
-      for(int i=0;i<StopAnalyzer.ENGLISH_STOP_WORDS.length;i++)
-        cas.add(StopAnalyzer.ENGLISH_STOP_WORDS[i]);
-      assertEquals(StopAnalyzer.ENGLISH_STOP_WORDS.length, cas.size());
-      for(int i=0;i<StopAnalyzer.ENGLISH_STOP_WORDS.length;i++)
-        assertTrue(cas.contains(StopAnalyzer.ENGLISH_STOP_WORDS[i]));
-    }
+  public void testRehash() throws Exception {
+    CharArraySet cas = new CharArraySet(0, true);
+    for(int i=0;i<StopAnalyzer.ENGLISH_STOP_WORDS.length;i++)
+      cas.add(StopAnalyzer.ENGLISH_STOP_WORDS[i]);
+    assertEquals(StopAnalyzer.ENGLISH_STOP_WORDS.length, cas.size());
+    for(int i=0;i<StopAnalyzer.ENGLISH_STOP_WORDS.length;i++)
+      assertTrue(cas.contains(StopAnalyzer.ENGLISH_STOP_WORDS[i]));
+  }
+
+  public void testNonZeroOffset() {
+    String[] words={"Hello","World","this","is","a","test"};
+    char[] findme="xthisy".toCharArray();   
+    CharArraySet set=new CharArraySet(10,true);
+    set.addAll(Arrays.asList(words));
+    assertTrue(set.contains(findme, 1, 4));
+    assertTrue(set.contains(new String(findme,1,4)));
+  }
 }