mirror of https://github.com/apache/lucene.git
LUCENE-1163: get CharArraySet.contains(char[], int offset, int length) to actually pay attention to offset
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@618652 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d941d1276f
commit
53d3a0cfab
|
@ -40,6 +40,10 @@ Bug fixes
|
||||||
|
|
||||||
1. LUCENE-1134: Fixed BooleanQuery.rewrite to only optimze a single
|
1. LUCENE-1134: Fixed BooleanQuery.rewrite to only optimze a single
|
||||||
clause query if minNumShouldMatch<=0. (Shai Erera via Michael Busch)
|
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
|
New features
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ public class CharArraySet extends AbstractSet {
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getSlot(char[] text, int off, int len) {
|
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);
|
int pos = code & (entries.length-1);
|
||||||
char[] text2 = entries[pos];
|
char[] text2 = entries[pos];
|
||||||
if (text2 != null && !equals(text, off, len, text2)) {
|
if (text2 != null && !equals(text, off, len, text2)) {
|
||||||
|
@ -175,14 +175,15 @@ public class CharArraySet extends AbstractSet {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getHashCode(char[] text, int len) {
|
private int getHashCode(char[] text, int offset, int len) {
|
||||||
int code = 0;
|
int code = 0;
|
||||||
|
final int stop = offset + len;
|
||||||
if (ignoreCase) {
|
if (ignoreCase) {
|
||||||
for (int i=0; i<len; i++) {
|
for (int i=offset; i<stop; i++) {
|
||||||
code = code*31 + Character.toLowerCase(text[i]);
|
code = code*31 + Character.toLowerCase(text[i]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int i=0; i<len; i++) {
|
for (int i=offset; i<stop; i++) {
|
||||||
code = code*31 + text[i];
|
code = code*31 + text[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,20 +17,27 @@ package org.apache.lucene.analysis;
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import org.apache.lucene.util.LuceneTestCase;
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
import org.apache.lucene.analysis.StopAnalyzer;
|
|
||||||
import org.apache.lucene.analysis.CharArraySet;
|
|
||||||
|
|
||||||
public class TestCharArraySet extends LuceneTestCase
|
public class TestCharArraySet extends LuceneTestCase
|
||||||
{
|
{
|
||||||
public void testRehash() throws Exception {
|
public void testRehash() throws Exception {
|
||||||
CharArraySet cas = new CharArraySet(0, true);
|
CharArraySet cas = new CharArraySet(0, true);
|
||||||
for(int i=0;i<StopAnalyzer.ENGLISH_STOP_WORDS.length;i++)
|
for(int i=0;i<StopAnalyzer.ENGLISH_STOP_WORDS.length;i++)
|
||||||
cas.add(StopAnalyzer.ENGLISH_STOP_WORDS[i]);
|
cas.add(StopAnalyzer.ENGLISH_STOP_WORDS[i]);
|
||||||
assertEquals(StopAnalyzer.ENGLISH_STOP_WORDS.length, cas.size());
|
assertEquals(StopAnalyzer.ENGLISH_STOP_WORDS.length, cas.size());
|
||||||
for(int i=0;i<StopAnalyzer.ENGLISH_STOP_WORDS.length;i++)
|
for(int i=0;i<StopAnalyzer.ENGLISH_STOP_WORDS.length;i++)
|
||||||
assertTrue(cas.contains(StopAnalyzer.ENGLISH_STOP_WORDS[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)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue