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 2012/02/23 19:27:09 UTC
svn commit: r1292881 -
/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSloppyPhraseQuery2.java
Author: rmuir
Date: Thu Feb 23 18:27:09 2012
New Revision: 1292881
URL: http://svn.apache.org/viewvc?rev=1292881&view=rev
Log:
add random sloppy phrase tests
Added:
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSloppyPhraseQuery2.java (with props)
Added: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSloppyPhraseQuery2.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSloppyPhraseQuery2.java?rev=1292881&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSloppyPhraseQuery2.java (added)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSloppyPhraseQuery2.java Thu Feb 23 18:27:09 2012
@@ -0,0 +1,203 @@
+package org.apache.lucene.search;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.Random;
+
+import org.apache.lucene.index.Term;
+import org.apache.lucene.util._TestUtil;
+
+/**
+ * random sloppy phrase query tests
+ */
+public class TestSloppyPhraseQuery2 extends SearchEquivalenceTestBase {
+ /** "A B"~N â "A B"~N+1 */
+ public void testIncreasingSloppiness() throws Exception {
+ Term t1 = randomTerm();
+ Term t2 = randomTerm();
+ PhraseQuery q1 = new PhraseQuery();
+ q1.add(t1);
+ q1.add(t2);
+ PhraseQuery q2 = new PhraseQuery();
+ q2.add(t1);
+ q2.add(t2);
+ for (int i = 0; i < 10; i++) {
+ q1.setSlop(i);
+ q2.setSlop(i+1);
+ assertSubsetOf(q1, q2);
+ }
+ }
+
+ /** same as the above with posincr */
+ public void testIncreasingSloppinessWithHoles() throws Exception {
+ Term t1 = randomTerm();
+ Term t2 = randomTerm();
+ PhraseQuery q1 = new PhraseQuery();
+ q1.add(t1);
+ q1.add(t2, 2);
+ PhraseQuery q2 = new PhraseQuery();
+ q2.add(t1);
+ q2.add(t2, 2);
+ for (int i = 0; i < 10; i++) {
+ q1.setSlop(i);
+ q2.setSlop(i+1);
+ assertSubsetOf(q1, q2);
+ }
+ }
+
+ /** "A B C"~N â "A B C"~N+1 */
+ public void testIncreasingSloppiness3() throws Exception {
+ Term t1 = randomTerm();
+ Term t2 = randomTerm();
+ Term t3 = randomTerm();
+ PhraseQuery q1 = new PhraseQuery();
+ q1.add(t1);
+ q1.add(t2);
+ q1.add(t3);
+ PhraseQuery q2 = new PhraseQuery();
+ q2.add(t1);
+ q2.add(t2);
+ q2.add(t3);
+ for (int i = 0; i < 10; i++) {
+ q1.setSlop(i);
+ q2.setSlop(i+1);
+ assertSubsetOf(q1, q2);
+ }
+ }
+
+ /** same as the above with posincr */
+ public void testIncreasingSloppiness3WithHoles() throws Exception {
+ Term t1 = randomTerm();
+ Term t2 = randomTerm();
+ Term t3 = randomTerm();
+ int pos1 = 1 + random.nextInt(3);
+ int pos2 = pos1 + 1 + random.nextInt(3);
+ PhraseQuery q1 = new PhraseQuery();
+ q1.add(t1);
+ q1.add(t2, pos1);
+ q1.add(t3, pos2);
+ PhraseQuery q2 = new PhraseQuery();
+ q2.add(t1);
+ q2.add(t2, pos1);
+ q2.add(t3, pos2);
+ for (int i = 0; i < 10; i++) {
+ q1.setSlop(i);
+ q2.setSlop(i+1);
+ assertSubsetOf(q1, q2);
+ }
+ }
+
+ /** "A A"~N â "A A"~N+1 */
+ public void testRepetitiveIncreasingSloppiness() throws Exception {
+ Term t = randomTerm();
+ PhraseQuery q1 = new PhraseQuery();
+ q1.add(t);
+ q1.add(t);
+ PhraseQuery q2 = new PhraseQuery();
+ q2.add(t);
+ q2.add(t);
+ for (int i = 0; i < 10; i++) {
+ q1.setSlop(i);
+ q2.setSlop(i+1);
+ assertSubsetOf(q1, q2);
+ }
+ }
+
+ /** same as the above with posincr */
+ public void testRepetitiveIncreasingSloppinessWithHoles() throws Exception {
+ Term t = randomTerm();
+ PhraseQuery q1 = new PhraseQuery();
+ q1.add(t);
+ q1.add(t, 2);
+ PhraseQuery q2 = new PhraseQuery();
+ q2.add(t);
+ q2.add(t, 2);
+ for (int i = 0; i < 10; i++) {
+ q1.setSlop(i);
+ q2.setSlop(i+1);
+ assertSubsetOf(q1, q2);
+ }
+ }
+
+ /** "A A A"~N â "A A A"~N+1 */
+ public void testRepetitiveIncreasingSloppiness3() throws Exception {
+ Term t = randomTerm();
+ PhraseQuery q1 = new PhraseQuery();
+ q1.add(t);
+ q1.add(t);
+ q1.add(t);
+ PhraseQuery q2 = new PhraseQuery();
+ q2.add(t);
+ q2.add(t);
+ q2.add(t);
+ for (int i = 0; i < 10; i++) {
+ q1.setSlop(i);
+ q2.setSlop(i+1);
+ assertSubsetOf(q1, q2);
+ }
+ }
+
+ /** same as the above with posincr */
+ public void testRepetitiveIncreasingSloppiness3WithHoles() throws Exception {
+ Term t = randomTerm();
+ int pos1 = 1 + random.nextInt(3);
+ int pos2 = pos1 + 1 + random.nextInt(3);
+ PhraseQuery q1 = new PhraseQuery();
+ q1.add(t);
+ q1.add(t, pos1);
+ q1.add(t, pos2);
+ PhraseQuery q2 = new PhraseQuery();
+ q2.add(t);
+ q2.add(t, pos1);
+ q2.add(t, pos2);
+ for (int i = 0; i < 10; i++) {
+ q1.setSlop(i);
+ q2.setSlop(i+1);
+ assertSubsetOf(q1, q2);
+ }
+ }
+
+ /** MultiPhraseQuery~N â MultiPhraseQuery~N+1 */
+ public void testRandomIncreasingSloppiness() throws Exception {
+ long seed = random.nextLong();
+ MultiPhraseQuery q1 = randomPhraseQuery(seed);
+ MultiPhraseQuery q2 = randomPhraseQuery(seed);
+ for (int i = 0; i < 10; i++) {
+ q1.setSlop(i);
+ q2.setSlop(i+1);
+ assertSubsetOf(q1, q2);
+ }
+ }
+
+ private MultiPhraseQuery randomPhraseQuery(long seed) throws Exception {
+ Random random = new Random(seed);
+ int length = _TestUtil.nextInt(random, 2, 5);
+ MultiPhraseQuery pq = new MultiPhraseQuery();
+ int position = 0;
+ for (int i = 0; i < length; i++) {
+ int depth = _TestUtil.nextInt(random, 1, 3);
+ Term terms[] = new Term[depth];
+ for (int j = 0; j < depth; j++) {
+ terms[j] = new Term("field", "" + (char) _TestUtil.nextInt(random, 'a', 'z'));
+ }
+ pq.add(terms, position);
+ position += _TestUtil.nextInt(random, 1, 3);
+ }
+ return pq;
+ }
+}