| using Lucene.Net.Util; |
| using NUnit.Framework; |
| using System; |
| |
| namespace Lucene.Net.QueryParsers.Surround.Query |
| { |
| /* |
| * 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. |
| */ |
| |
| [TestFixture] |
| public class Test03Distance : LuceneTestCase |
| { |
| //public static void Main(string[] args) { |
| // TestRunner.run(new TestSuite(Test03Distance.class)); |
| //} |
| |
| private bool verbose = false; |
| private int maxBasicQueries = 16; |
| |
| private string[] exceptionQueries = { |
| "(aa and bb) w cc", |
| "(aa or bb) w (cc and dd)", |
| "(aa opt bb) w cc", |
| "(aa not bb) w cc", |
| "(aa or bb) w (bi:cc)", |
| "(aa or bb) w bi:cc", |
| "(aa or bi:bb) w cc", |
| "(aa or (bi:bb)) w cc", |
| "(aa or (bb and dd)) w cc" |
| }; |
| |
| [Test] |
| public virtual void Test00Exceptions() |
| { |
| string m = ExceptionQueryTst.GetFailQueries(exceptionQueries, verbose); |
| if (m.Length > 0) |
| { |
| fail("No ParseException for:\n" + m); |
| } |
| } |
| |
| private readonly string fieldName = "bi"; |
| |
| private string[] docs1 = { |
| "word1 word2 word3", |
| "word4 word5", |
| "ord1 ord2 ord3", |
| "orda1 orda2 orda3 word2 worda3", |
| "a c e a b c" |
| }; |
| |
| SingleFieldTestDb db1; |
| |
| public override void SetUp() |
| { |
| base.SetUp(); |
| db1 = new SingleFieldTestDb(Random, docs1, fieldName); |
| db2 = new SingleFieldTestDb(Random, docs2, fieldName); |
| db3 = new SingleFieldTestDb(Random, docs3, fieldName); |
| } |
| |
| private void DistanceTst(String query, int[] expdnrs, SingleFieldTestDb db) |
| { |
| BooleanQueryTst bqt = new BooleanQueryTst(query, expdnrs, db, fieldName, |
| new BasicQueryFactory(maxBasicQueries)); |
| bqt.Verbose = (verbose); |
| bqt.DoTest(); |
| } |
| |
| public virtual void DistanceTest1(string query, int[] expdnrs) |
| { |
| DistanceTst(query, expdnrs, db1); |
| } |
| |
| [Test] |
| public virtual void Test0W01() |
| { |
| int[] expdnrs = { 0 }; DistanceTest1("word1 w word2", expdnrs); |
| } |
| [Test] |
| public virtual void Test0N01() |
| { |
| int[] expdnrs = { 0 }; DistanceTest1("word1 n word2", expdnrs); |
| } |
| [Test] |
| public virtual void Test0N01r() |
| { /* r reverse */ |
| int[] expdnrs = { 0 }; DistanceTest1("word2 n word1", expdnrs); |
| } |
| [Test] |
| public virtual void Test0W02() |
| { |
| int[] expdnrs = { }; DistanceTest1("word2 w word1", expdnrs); |
| } |
| [Test] |
| public virtual void Test0W03() |
| { |
| int[] expdnrs = { }; DistanceTest1("word2 2W word1", expdnrs); |
| } |
| [Test] |
| public virtual void Test0N03() |
| { |
| int[] expdnrs = { 0 }; DistanceTest1("word2 2N word1", expdnrs); |
| } |
| [Test] |
| public virtual void Test0N03r() |
| { |
| int[] expdnrs = { 0 }; DistanceTest1("word1 2N word2", expdnrs); |
| } |
| |
| [Test] |
| public virtual void Test0W04() |
| { |
| int[] expdnrs = { }; DistanceTest1("word2 3w word1", expdnrs); |
| } |
| |
| [Test] |
| public virtual void Test0N04() |
| { |
| int[] expdnrs = { 0 }; DistanceTest1("word2 3n word1", expdnrs); |
| } |
| [Test] |
| public virtual void Test0N04r() |
| { |
| int[] expdnrs = { 0 }; DistanceTest1("word1 3n word2", expdnrs); |
| } |
| |
| [Test] |
| public virtual void Test0W05() |
| { |
| int[] expdnrs = { }; DistanceTest1("orda1 w orda3", expdnrs); |
| } |
| [Test] |
| public virtual void Test0W06() |
| { |
| int[] expdnrs = { 3 }; DistanceTest1("orda1 2w orda3", expdnrs); |
| } |
| |
| [Test] |
| public virtual void Test1Wtrunc01() |
| { |
| int[] expdnrs = { 0 }; DistanceTest1("word1* w word2", expdnrs); |
| } |
| [Test] |
| public virtual void Test1Wtrunc02() |
| { |
| int[] expdnrs = { 0 }; DistanceTest1("word* w word2", expdnrs); |
| } |
| [Test] |
| public virtual void Test1Wtrunc02r() |
| { |
| int[] expdnrs = { 0, 3 }; DistanceTest1("word2 w word*", expdnrs); |
| } |
| [Test] |
| public virtual void Test1Ntrunc02() |
| { |
| int[] expdnrs = { 0, 3 }; DistanceTest1("word* n word2", expdnrs); |
| } |
| [Test] |
| public virtual void Test1Ntrunc02r() |
| { |
| int[] expdnrs = { 0, 3 }; DistanceTest1("word2 n word*", expdnrs); |
| } |
| |
| [Test] |
| public virtual void Test1Wtrunc03() |
| { |
| int[] expdnrs = { 0 }; DistanceTest1("word1* w word2*", expdnrs); |
| } |
| [Test] |
| public virtual void Test1Ntrunc03() |
| { |
| int[] expdnrs = { 0 }; DistanceTest1("word1* N word2*", expdnrs); |
| } |
| |
| [Test] |
| public virtual void Test1Wtrunc04() |
| { |
| int[] expdnrs = { }; DistanceTest1("kxork* w kxor*", expdnrs); |
| } |
| [Test] |
| public virtual void Test1Ntrunc04() |
| { |
| int[] expdnrs = { }; DistanceTest1("kxork* 99n kxor*", expdnrs); |
| } |
| |
| [Test] |
| public virtual void Test1Wtrunc05() |
| { |
| int[] expdnrs = { }; DistanceTest1("word2* 2W word1*", expdnrs); |
| } |
| [Test] |
| public virtual void Test1Ntrunc05() |
| { |
| int[] expdnrs = { 0 }; DistanceTest1("word2* 2N word1*", expdnrs); |
| } |
| |
| [Test] |
| public virtual void Test1Wtrunc06() |
| { |
| int[] expdnrs = { 3 }; DistanceTest1("ord* W word*", expdnrs); |
| } |
| [Test] |
| public virtual void Test1Ntrunc06() |
| { |
| int[] expdnrs = { 3 }; DistanceTest1("ord* N word*", expdnrs); |
| } |
| [Test] |
| public virtual void Test1Ntrunc06r() |
| { |
| int[] expdnrs = { 3 }; DistanceTest1("word* N ord*", expdnrs); |
| } |
| |
| [Test] |
| public virtual void Test1Wtrunc07() |
| { |
| int[] expdnrs = { 3 }; DistanceTest1("(orda2 OR orda3) W word*", expdnrs); |
| } |
| [Test] |
| public virtual void Test1Wtrunc08() |
| { |
| int[] expdnrs = { 3 }; DistanceTest1("(orda2 OR orda3) W (word2 OR worda3)", expdnrs); |
| } |
| [Test] |
| public virtual void Test1Wtrunc09() |
| { |
| int[] expdnrs = { 3 }; DistanceTest1("(orda2 OR orda3) 2W (word2 OR worda3)", expdnrs); |
| } |
| [Test] |
| public virtual void Test1Ntrunc09() |
| { |
| int[] expdnrs = { 3 }; DistanceTest1("(orda2 OR orda3) 2N (word2 OR worda3)", expdnrs); |
| } |
| |
| string[] docs2 = { |
| "w1 w2 w3 w4 w5", |
| "w1 w3 w2 w3", |
| "" |
| }; |
| |
| SingleFieldTestDb db2; |
| |
| public virtual void DistanceTest2(string query, int[] expdnrs) |
| { |
| DistanceTst(query, expdnrs, db2); |
| } |
| |
| [Test] |
| public virtual void Test2Wprefix01() |
| { |
| int[] expdnrs = { 0 }; DistanceTest2("W (w1, w2, w3)", expdnrs); |
| } |
| [Test] |
| public virtual void Test2Nprefix01a() |
| { |
| int[] expdnrs = { 0, 1 }; DistanceTest2("N(w1, w2, w3)", expdnrs); |
| } |
| [Test] |
| public virtual void Test2Nprefix01b() |
| { |
| int[] expdnrs = { 0, 1 }; DistanceTest2("N(w3, w1, w2)", expdnrs); |
| } |
| |
| [Test] |
| public virtual void Test2Wprefix02() |
| { |
| int[] expdnrs = { 0, 1 }; DistanceTest2("2W(w1,w2,w3)", expdnrs); |
| } |
| |
| [Test] |
| public virtual void Test2Nprefix02a() |
| { |
| int[] expdnrs = { 0, 1 }; DistanceTest2("2N(w1,w2,w3)", expdnrs); |
| } |
| [Test] |
| public virtual void Test2Nprefix02b() |
| { |
| int[] expdnrs = { 0, 1 }; DistanceTest2("2N(w2,w3,w1)", expdnrs); |
| } |
| |
| [Test] |
| public virtual void Test2Wnested01() |
| { |
| int[] expdnrs = { 0 }; DistanceTest2("w1 W w2 W w3", expdnrs); |
| } |
| [Test] |
| public virtual void Test2Nnested01() |
| { |
| int[] expdnrs = { 0 }; DistanceTest2("w1 N w2 N w3", expdnrs); |
| } |
| |
| [Test] |
| public virtual void Test2Wnested02() |
| { |
| int[] expdnrs = { 0, 1 }; DistanceTest2("w1 2W w2 2W w3", expdnrs); |
| } |
| [Test] |
| public virtual void Test2Nnested02() |
| { |
| int[] expdnrs = { 0, 1 }; DistanceTest2("w1 2N w2 2N w3", expdnrs); |
| } |
| |
| string[] docs3 = { |
| "low pressure temperature inversion and rain", |
| "when the temperature has a negative height above a depression no precipitation gradient is expected", |
| "when the temperature has a negative height gradient above a depression no precipitation is expected", |
| "" |
| }; |
| |
| SingleFieldTestDb db3; |
| |
| public virtual void DistanceTest3(string query, int[] expdnrs) |
| { |
| DistanceTst(query, expdnrs, db3); |
| } |
| |
| [Test] |
| public virtual void Test3Example01() |
| { |
| int[] expdnrs = { 0, 2 }; // query does not match doc 1 because "gradient" is in wrong place there. |
| DistanceTest3("50n((low w pressure*) or depression*," |
| + "5n(temperat*, (invers* or (negativ* 3n gradient*)))," |
| + "rain* or precipitat*)", |
| expdnrs); |
| } |
| } |
| } |