public void TheProblem_OverlapWithPartOfItself() { // Content 3: aa bb cc dd ee ff ee dd cc bb aa aa bb cc dd // Content 4: aa bb cc dd cc // Content 5: cc dd ee ff Console.WriteLine("dd ee * ee"); // dd ee * ee => (dd ee) * (ee) does not work as expected var lm = MakeSpan(0, dd, ee); var rm = MakeSpan(0, ee); var q1 = MakeSpan(1, lm, rm); TestIndex.AssertQuery(q1, 3, 5); // dd ee * ee => dd (ee * ee) works, but only because nothing follows the last ee var q2 = MakeSpan(0, dd, MakeSpan(1, ee, ee)); TestIndex.AssertQuery(q2, 3); // (dd ee) * (ee - (dd ee)) var not = new SpanNotQuery(ee, MakeSpan(0, dd, ee)); var q3 = MakeSpan(1, lm, not); TestIndex.AssertQuery(q3, 3); }
public void OverlappingSpans_Part3() { // If you rewrite it as (cc (dd ** (dd cc))) it matches only 4! Console.WriteLine("(cc (dd ** (dd cc)))"); var q3 = MakeSpan(0, cc, MakeSpan(16, dd, MakeSpan(0, dd, cc))); TestIndex.AssertQuery(q3, 4); }
public void OverlappingSpans_Part2() { // If you rewrite the query as (cc (dd ** dd) cc) it doesn't work at all // because the inner match is to great var gap = MakeSpan(16, dd, dd); var q2 = MakeSpan(0, cc, gap, cc); TestIndex.AssertQuery(q2); }
public void DeletedFile_FoundInRevision6to8() { TestIndex.AssertQueryFromRevision(int.MaxValue, "p:deleted.cpp"); // HEAD should find nothing TestIndex.AssertQueryFromRevision(0, "p:deleted.cpp", 25); // ALL should find it TestIndex.AssertQueryFromRevision(5, "p:deleted.cpp"); TestIndex.AssertQueryFromRevision(6, "p:deleted.cpp", 25); TestIndex.AssertQueryFromRevision(7, "p:deleted.cpp", 25); TestIndex.AssertQueryFromRevision(8, "p:deleted.cpp", 25); TestIndex.AssertQueryFromRevision(9, "p:deleted.cpp"); }
public void OverlappingSpans_Part1() { // A SpanQuery clause can overlap its preceding clause if its // slope is greater than 0 // In the following example ((cc dd) ** (dd cc)) matches content 3 and 4! var lm = MakeSpan(0, cc, dd); var rm = MakeSpan(0, dd, cc); var q1 = MakeSpan(16, lm, rm); TestIndex.AssertQuery(q1, 3, 4); }
public void OverlappingSpans_Part5() { // Interestingly, the following does not work with SpanNotQueries // dd ee * ee => ((dd ee) - ee) * ee never matches because the // first span (dd ee) always overlaps with ee var span = MakeSpan(0, dd, ee); TestIndex.AssertQuery(span, 3, 5); var q5 = new SpanNotQuery(span, ee); TestIndex.AssertQuery(q5); }
public void OverlappingSpans_Part4() { var lm = MakeSpan(0, cc, dd); var rm = MakeSpan(0, dd, cc); // Rewriting with SpanNotQueries works! Console.WriteLine("((cc dd) - (dd cc)) ** (dd cc)"); var not = new SpanNotQuery(lm, rm); var q4 = MakeSpan(16, not, rm); TestIndex.AssertQuery(q4, 3); // This is now implemented int the parser TestIndex.AssertQuery(Content("cc dd ** dd cc"), 3); }
public void OverlappingSpans_Part6() { // But the reverse ways of excluding spans works // (dd ee * ee) => (dd ee) * (ee -(dd ee)) var span = MakeSpan(0, dd, ee); var not = new SpanNotQuery(ee, span); var q6 = MakeSpan(1, span, not); TestIndex.AssertQuery(q6, 3); // The parser now implements this strategy var q = Content("dd ee * ee"); TestIndex.AssertQuery(Content("dd ee * ee"), 3); }
public void TrailingGap() { Hits a = TestIndex.SearchHeadRevision(PathQuery("/general/**")); Hits b = TestIndex.SearchHeadRevision(PathQuery("/general/")); Assert.That(a.Length() == b.Length()); HashSet <string> aa = new HashSet <string>(); HashSet <string> bb = new HashSet <string>(); for (int i = 0; i < a.Length(); ++i) { aa.Add(a.Doc(i).Get(FieldName.Id)); bb.Add(b.Doc(i).Get(FieldName.Id)); } Assert.That(aa.SetEquals(bb), Is.True); }
public void SingleGap() { TestIndex.AssertQuery(PathQuery("/shared/general/FileIO/*.xml"), 4); }
public void SomePathInFixedExternals() { TestIndex.AssertQueryFromHeadRevision("x:products/internal", 16); }
public void LeadingWildcards() { TestIndex.AssertQuery(PathQuery("*.cs"), 0, 14, 17); }
public void PathGap() { TestIndex.AssertQuery(PathQuery("FileIO/**/fileio.cpp"), 1, 8, 15); TestIndex.AssertQuery(PathQuery("/woanders/FileIO/**/fileio.*"), 15, 16); TestIndex.AssertQuery(PathQuery("shared/**/fileio"), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); }
public void FindPathOrFile() { TestIndex.AssertQuery(PathQuery("flip"), 5, 14); }
public void FindPathOnly() { TestIndex.AssertQuery(PathQuery("flip/"), 5); }
public void WildcardOnlyQuery_ExpectedResultsNothing() { TestIndex.AssertQueryFromHeadRevision("c:\"*\""); TestIndex.AssertQueryFromHeadRevision("c:\"**\""); TestIndex.AssertQueryFromHeadRevision("c:\"**/\""); }
public void AbsoluteExternal_Found() { TestIndex.AssertQueryFromHeadRevision("x:\"svn://svnquery.tigris.org\"", 17); }
public void RealLifeFulltext() { TestIndex.AssertQueryFromHeadRevision(@"c:""include ** comment ** searched""", 8); }
public void Gap() { TestIndex.AssertQueryFromHeadRevision("c:\"comment ** that", 8, 9); }
public void WildcardStar() { TestIndex.AssertQueryFromHeadRevision("c:El*ant", 12, 15, 16, 17); }
public void FixedExternalsWildcards() { TestIndex.AssertQueryFromHeadRevision("x:\"-r*\"", 16, 15); }
public void FixedExternals() { TestIndex.AssertQueryFromHeadRevision("x:\"-r5000\"", 16); }
public void WildcardsQuestionMark() { TestIndex.AssertQueryFromHeadRevision("c:Ele?ant", 15, 16, 17); }
public void PartialPath() { TestIndex.AssertQuery(PathQuery("selt.sam/source/form1.design.cs"), 17); }
public void RealLifeIncludeQuery() { TestIndex.AssertQueryFromHeadRevision(@"c:""#include ** bla.h""", 9); }
public void EmptyQuery() { TestIndex.AssertQuery(PathQuery("")); }
public void RealLifeGrouping() { TestIndex.AssertQueryFromHeadRevision(@"c:(include comment searched)", 8); TestIndex.AssertQueryFromHeadRevision(@"c:(include comment)", 8, 9); TestIndex.AssertQueryFromHeadRevision(@"c:(include comment -searched)", 9); }
public void StartAtRoot() { TestIndex.AssertQuery(PathQuery("/shared/"), 1, 2, 3, 4, 5, 6, 7); }
public void LargeData_NoMoreThanMaxNumberOfTermsPerDocumentAreIndexed() { TestIndex.AssertQueryFromHeadRevision("c:a49", 27); TestIndex.AssertQueryFromHeadRevision("c:a50"); // should not be indexed }
public void CsExtension() { TestIndex.AssertQuery(PathQuery(".cs"), 0, 14, 17); TestIndex.AssertQuery(PathQuery("cs"), 0, 14, 17); }