Пример #1
0
        public virtual void TestNearSpansSkipPast()
        {
            SpanNearQuery q    = MakeQuery();
            Spans         span = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, q);

            Assert.AreEqual(false, span.SkipTo(2));
        }
Пример #2
0
        public virtual void TestFirstClauseWithoutPayload()
        {
            Spans         spans;
            IndexSearcher searcher = Searcher;

            SpanQuery[] clauses = new SpanQuery[3];
            clauses[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "nopayload"));
            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "qq"));
            clauses[2] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "ss"));

            SpanNearQuery spanNearQuery = new SpanNearQuery(clauses, 6, true);

            SpanQuery[] clauses2 = new SpanQuery[2];

            clauses2[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "pp"));
            clauses2[1] = spanNearQuery;

            SpanNearQuery snq = new SpanNearQuery(clauses2, 6, false);

            SpanQuery[] clauses3 = new SpanQuery[2];

            clauses3[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "np"));
            clauses3[1] = snq;

            SpanNearQuery nestedSpanNearQuery = new SpanNearQuery(clauses3, 6, false);

            spans = MultiSpansWrapper.Wrap(searcher.TopReaderContext, nestedSpanNearQuery);

            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
            CheckSpans(spans, 1, new int[] { 3 });
            CloseIndexReader.Dispose();
            Directory.Dispose();
        }
        public virtual void TestSpans2()
        {
            AssumeTrue("Broken scoring: LUCENE-3723", Searcher.Similarity is TFIDFSimilarity);
            SpanQuery qA1 = new SpanTermQuery(new Term("gender", "female"));
            SpanQuery qA2 = new SpanTermQuery(new Term("first", "james"));
            SpanQuery qA  = new SpanOrQuery(qA1, new FieldMaskingSpanQuery(qA2, "gender"));
            SpanQuery qB  = new SpanTermQuery(new Term("last", "jones"));
            SpanQuery q   = new SpanNearQuery(new SpanQuery[] { new FieldMaskingSpanQuery(qA, "id"), new FieldMaskingSpanQuery(qB, "id") }, -1, false);

            Check(q, new int[] { 0, 1, 2, 3 });

            Spans span = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, q);

            Assert.AreEqual(true, span.Next());
            Assert.AreEqual(s(0, 0, 1), s(span));

            Assert.AreEqual(true, span.Next());
            Assert.AreEqual(s(1, 1, 2), s(span));

            Assert.AreEqual(true, span.Next());
            Assert.AreEqual(s(2, 0, 1), s(span));

            Assert.AreEqual(true, span.Next());
            Assert.AreEqual(s(2, 2, 3), s(span));

            Assert.AreEqual(true, span.Next());
            Assert.AreEqual(s(3, 0, 1), s(span));

            Assert.AreEqual(false, span.Next());
        }
Пример #4
0
        public virtual void TestNearSpansSkipTo1()
        {
            SpanNearQuery q    = MakeQuery();
            Spans         span = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, q);

            Assert.AreEqual(true, span.SkipTo(1));
            Assert.AreEqual(s(1, 0, 4), s(span));
        }
Пример #5
0
        public virtual void TestNearSpansNextThenSkipPast()
        {
            SpanNearQuery q    = MakeQuery();
            Spans         span = MultiSpansWrapper.Wrap(searcher.TopReaderContext, q);

            Assert.AreEqual(true, span.MoveNext());
            Assert.AreEqual(s(0, 0, 3), s(span));
            Assert.AreEqual(false, span.SkipTo(2));
        }
Пример #6
0
 private Spans OrSpans(string[] terms)
 {
     SpanQuery[] sqa = new SpanQuery[terms.Length];
     for (int i = 0; i < terms.Length; i++)
     {
         sqa[i] = MakeSpanTermQuery(terms[i]);
     }
     return(MultiSpansWrapper.Wrap(searcher.TopReaderContext, new SpanOrQuery(sqa)));
 }
Пример #7
0
        public virtual void TestNestedSpans()
        {
            SpanTermQuery stq;
            Spans         spans;
            IndexSearcher searcher = Searcher;

            stq   = new SpanTermQuery(new Term(PayloadHelper.FIELD, "mark"));
            spans = MultiSpansWrapper.Wrap(searcher.TopReaderContext, stq);
            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
            CheckSpans(spans, 0, null);

            SpanQuery[] clauses = new SpanQuery[3];
            clauses[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "rr"));
            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "yy"));
            clauses[2] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "xx"));
            SpanNearQuery spanNearQuery = new SpanNearQuery(clauses, 12, false);

            spans = MultiSpansWrapper.Wrap(searcher.TopReaderContext, spanNearQuery);
            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
            CheckSpans(spans, 2, new int[] { 3, 3 });

            clauses[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "xx"));
            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "rr"));
            clauses[2] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "yy"));

            spanNearQuery = new SpanNearQuery(clauses, 6, true);

            spans = MultiSpansWrapper.Wrap(searcher.TopReaderContext, spanNearQuery);

            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
            CheckSpans(spans, 1, new int[] { 3 });

            clauses = new SpanQuery[2];

            clauses[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "xx"));
            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "rr"));

            spanNearQuery = new SpanNearQuery(clauses, 6, true);

            // xx within 6 of rr

            SpanQuery[] clauses2 = new SpanQuery[2];

            clauses2[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "yy"));
            clauses2[1] = spanNearQuery;

            SpanNearQuery nestedSpanNearQuery = new SpanNearQuery(clauses2, 6, false);

            // yy within 6 of xx within 6 of rr

            spans = MultiSpansWrapper.Wrap(searcher.TopReaderContext, nestedSpanNearQuery);
            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
            CheckSpans(spans, 2, new int[] { 3, 3 });
            CloseIndexReader.Dispose();
            Directory.Dispose();
        }
Пример #8
0
        public virtual void TestShrinkToAfterShortestMatch3()
        {
            Directory         directory = NewDirectory();
            RandomIndexWriter writer    = new RandomIndexWriter(Random(), directory, NewIndexWriterConfig(TEST_VERSION_CURRENT, new TestPayloadAnalyzer(this)));

            Document doc = new Document();

            doc.Add(new TextField("content", new StringReader("j k a l f k k p a t a k l k t a")));
            writer.AddDocument(doc);
            IndexReader   reader = writer.Reader;
            IndexSearcher @is    = NewSearcher(reader);

            writer.Dispose();

            SpanTermQuery stq1 = new SpanTermQuery(new Term("content", "a"));
            SpanTermQuery stq2 = new SpanTermQuery(new Term("content", "k"));

            SpanQuery[]   sqs   = new SpanQuery[] { stq1, stq2 };
            SpanNearQuery snq   = new SpanNearQuery(sqs, 0, true);
            Spans         spans = MultiSpansWrapper.Wrap(@is.TopReaderContext, snq);

            TopDocs          topDocs    = @is.Search(snq, 1);
            HashSet <string> payloadSet = new HashSet <string>();

            for (int i = 0; i < topDocs.ScoreDocs.Length; i++)
            {
                while (spans.Next())
                {
                    ICollection <sbyte[]> payloads = spans.Payload;

                    foreach (sbyte[] payload in payloads)
                    {
                        payloadSet.Add(Encoding.UTF8.GetString((byte[])(Array)payload));
                    }
                }
            }
            Assert.AreEqual(2, payloadSet.Count);
            if (VERBOSE)
            {
                foreach (String payload in payloadSet)
                {
                    Console.WriteLine("match:" + payload);
                }
            }
            Assert.IsTrue(payloadSet.Contains("a:Noise:10"));
            Assert.IsTrue(payloadSet.Contains("k:Noise:11"));
            reader.Dispose();
            directory.Dispose();
        }
Пример #9
0
        private int SpanCount(string include, string exclude, int pre, int post)
        {
            SpanTermQuery iq    = new SpanTermQuery(new Term(field, include));
            SpanTermQuery eq    = new SpanTermQuery(new Term(field, exclude));
            SpanNotQuery  snq   = new SpanNotQuery(iq, eq, pre, post);
            Spans         spans = MultiSpansWrapper.Wrap(searcher.TopReaderContext, snq);

            int i = 0;

            while (spans.MoveNext())
            {
                i++;
            }
            return(i);
        }
Пример #10
0
        public virtual void TestSpanTermQuery()
        {
            SpanTermQuery stq;
            Spans         spans;

            stq   = new SpanTermQuery(new Term(PayloadHelper.FIELD, "seventy"));
            spans = MultiSpansWrapper.Wrap(IndexReader.Context, stq);
            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
            CheckSpans(spans, 100, 1, 1, 1);

            stq   = new SpanTermQuery(new Term(PayloadHelper.NO_PAYLOAD_FIELD, "seventy"));
            spans = MultiSpansWrapper.Wrap(IndexReader.Context, stq);
            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
            CheckSpans(spans, 100, 0, 0, 0);
        }
Пример #11
0
        public virtual void TestSpansSkipTo()
        {
            SpanTermQuery t1 = new SpanTermQuery(new Term("field", "seventy"));
            SpanTermQuery t2 = new SpanTermQuery(new Term("field", "seventy"));
            Spans         s1 = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, t1);
            Spans         s2 = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, t2);

            Assert.IsTrue(s1.Next());
            Assert.IsTrue(s2.Next());

            bool hasMore = true;

            do
            {
                hasMore = SkipToAccoringToJavaDocs(s1, s1.Doc() + 1);
                Assert.AreEqual(hasMore, s2.SkipTo(s2.Doc() + 1));
                Assert.AreEqual(s1.Doc(), s2.Doc());
            } while (hasMore);
        }
Пример #12
0
        public virtual void TestSpanNearOrderedOverlap()
        {
            bool          ordered = true;
            int           slop    = 1;
            SpanNearQuery snq     = new SpanNearQuery(new SpanQuery[] { MakeSpanTermQuery("t1"), MakeSpanTermQuery("t2"), MakeSpanTermQuery("t3") }, slop, ordered);
            Spans         spans   = MultiSpansWrapper.Wrap(searcher.TopReaderContext, snq);

            Assert.IsTrue(spans.MoveNext(), "first range");
            Assert.AreEqual(11, spans.Doc, "first doc");
            Assert.AreEqual(0, spans.Start, "first start");
            Assert.AreEqual(4, spans.End, "first end");

            Assert.IsTrue(spans.MoveNext(), "second range");
            Assert.AreEqual(11, spans.Doc, "second doc");
            Assert.AreEqual(2, spans.Start, "second start");
            Assert.AreEqual(6, spans.End, "second end");

            Assert.IsFalse(spans.MoveNext(), "third range");
        }
Пример #13
0
        public virtual void TestShrinkToAfterShortestMatch()
        {
            Directory         directory = NewDirectory();
            RandomIndexWriter writer    = new RandomIndexWriter(Random, directory, NewIndexWriterConfig(TEST_VERSION_CURRENT, new TestPayloadAnalyzer(this)));

            Document doc = new Document();

            doc.Add(new TextField("content", new StringReader("a b c d e f g h i j a k")));
            writer.AddDocument(doc);

            IndexReader   reader = writer.GetReader();
            IndexSearcher @is    = NewSearcher(reader);

            writer.Dispose();

            SpanTermQuery stq1 = new SpanTermQuery(new Term("content", "a"));
            SpanTermQuery stq2 = new SpanTermQuery(new Term("content", "k"));

            SpanQuery[]   sqs   = new SpanQuery[] { stq1, stq2 };
            SpanNearQuery snq   = new SpanNearQuery(sqs, 1, true);
            Spans         spans = MultiSpansWrapper.Wrap(@is.TopReaderContext, snq);

            TopDocs          topDocs    = @is.Search(snq, 1);
            HashSet <string> payloadSet = new HashSet <string>();

            for (int i = 0; i < topDocs.ScoreDocs.Length; i++)
            {
                while (spans.Next())
                {
                    var payloads = spans.GetPayload();
                    foreach (var payload in payloads)
                    {
                        payloadSet.Add(Encoding.UTF8.GetString(payload));
                    }
                }
            }
            Assert.AreEqual(2, payloadSet.Count);
            Assert.IsTrue(payloadSet.Contains("a:Noise:10"));
            Assert.IsTrue(payloadSet.Contains("k:Noise:11"));
            reader.Dispose();
            directory.Dispose();
        }
        public virtual void TestSpans1()
        {
            SpanQuery q1 = new SpanTermQuery(new Term("first", "sally"));
            SpanQuery q2 = new SpanTermQuery(new Term("first", "james"));
            SpanQuery qA = new SpanOrQuery(q1, q2);
            SpanQuery qB = new FieldMaskingSpanQuery(qA, "id");

            Check(qA, new int[] { 0, 1, 2, 4 });
            Check(qB, new int[] { 0, 1, 2, 4 });

            Spans spanA = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, qA);
            Spans spanB = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, qB);

            while (spanA.Next())
            {
                Assert.IsTrue(spanB.Next(), "spanB not still going");
                Assert.AreEqual(s(spanA), s(spanB), "spanA not equal spanB");
            }
            Assert.IsTrue(!(spanB.Next()), "spanB still going even tough spanA is done");
        }
        public virtual void TestSpans0()
        {
            SpanQuery q1 = new SpanTermQuery(new Term("gender", "female"));
            SpanQuery q2 = new SpanTermQuery(new Term("first", "james"));
            SpanQuery q  = new SpanOrQuery(q1, new FieldMaskingSpanQuery(q2, "gender"));

            Check(q, new int[] { 0, 1, 2, 3, 4 });

            Spans span = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, q);

            Assert.AreEqual(true, span.Next());
            Assert.AreEqual(s(0, 0, 1), s(span));

            Assert.AreEqual(true, span.Next());
            Assert.AreEqual(s(1, 0, 1), s(span));

            Assert.AreEqual(true, span.Next());
            Assert.AreEqual(s(1, 1, 2), s(span));

            Assert.AreEqual(true, span.Next());
            Assert.AreEqual(s(2, 0, 1), s(span));

            Assert.AreEqual(true, span.Next());
            Assert.AreEqual(s(2, 1, 2), s(span));

            Assert.AreEqual(true, span.Next());
            Assert.AreEqual(s(2, 2, 3), s(span));

            Assert.AreEqual(true, span.Next());
            Assert.AreEqual(s(3, 0, 1), s(span));

            Assert.AreEqual(true, span.Next());
            Assert.AreEqual(s(4, 0, 1), s(span));

            Assert.AreEqual(true, span.Next());
            Assert.AreEqual(s(4, 1, 2), s(span));

            Assert.AreEqual(false, span.Next());
        }
Пример #16
0
        public virtual void TestSpanFirst()
        {
            SpanQuery      match;
            SpanFirstQuery sfq;

            match = new SpanTermQuery(new Term(PayloadHelper.FIELD, "one"));
            sfq   = new SpanFirstQuery(match, 2);
            Spans spans = MultiSpansWrapper.Wrap(IndexReader.Context, sfq);

            CheckSpans(spans, 109, 1, 1, 1);
            //Test more complicated subclause
            SpanQuery[] clauses = new SpanQuery[2];
            clauses[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "one"));
            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "hundred"));
            match      = new SpanNearQuery(clauses, 0, true);
            sfq        = new SpanFirstQuery(match, 2);
            CheckSpans(MultiSpansWrapper.Wrap(IndexReader.Context, sfq), 100, 2, 1, 1);

            match = new SpanNearQuery(clauses, 0, false);
            sfq   = new SpanFirstQuery(match, 2);
            CheckSpans(MultiSpansWrapper.Wrap(IndexReader.Context, sfq), 100, 2, 1, 1);
        }
Пример #17
0
        public virtual void TestSpanNot()
        {
            SpanQuery[] clauses = new SpanQuery[2];
            clauses[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "one"));
            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "three"));
            SpanQuery    spq = new SpanNearQuery(clauses, 5, true);
            SpanNotQuery snq = new SpanNotQuery(spq, new SpanTermQuery(new Term(PayloadHelper.FIELD, "two")));

            Directory         directory = NewDirectory();
            RandomIndexWriter writer    = new RandomIndexWriter(Random(), directory, NewIndexWriterConfig(TEST_VERSION_CURRENT, new PayloadAnalyzer(this)).SetSimilarity(Similarity));

            Document doc = new Document();

            doc.Add(NewTextField(PayloadHelper.FIELD, "one two three one four three", Field.Store.YES));
            writer.AddDocument(doc);
            IndexReader reader = writer.Reader;

            writer.Dispose();

            CheckSpans(MultiSpansWrapper.Wrap(reader.Context, snq), 1, new int[] { 2 });
            reader.Dispose();
            directory.Dispose();
        }
Пример #18
0
        public virtual void TestHeavilyNestedSpanQuery()
        {
            Spans         spans;
            IndexSearcher searcher = Searcher;

            SpanQuery[] clauses = new SpanQuery[3];
            clauses[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "one"));
            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "two"));
            clauses[2] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "three"));

            SpanNearQuery spanNearQuery = new SpanNearQuery(clauses, 5, true);

            clauses    = new SpanQuery[3];
            clauses[0] = spanNearQuery;
            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "five"));
            clauses[2] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "six"));

            SpanNearQuery spanNearQuery2 = new SpanNearQuery(clauses, 6, true);

            SpanQuery[] clauses2 = new SpanQuery[2];
            clauses2[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "eleven"));
            clauses2[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "ten"));
            SpanNearQuery spanNearQuery3 = new SpanNearQuery(clauses2, 2, false);

            SpanQuery[] clauses3 = new SpanQuery[3];
            clauses3[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "nine"));
            clauses3[1] = spanNearQuery2;
            clauses3[2] = spanNearQuery3;

            SpanNearQuery nestedSpanNearQuery = new SpanNearQuery(clauses3, 6, false);

            spans = MultiSpansWrapper.Wrap(searcher.TopReaderContext, nestedSpanNearQuery);
            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
            CheckSpans(spans, 2, new int[] { 8, 8 });
            CloseIndexReader.Dispose();
            Directory.Dispose();
        }
Пример #19
0
        public virtual void TestSpanNearUnOrdered()
        {
            //See http://www.gossamer-threads.com/lists/lucene/java-dev/52270 for discussion about this test
            SpanNearQuery snq;

            snq = new SpanNearQuery(new SpanQuery[] { MakeSpanTermQuery("u1"), MakeSpanTermQuery("u2") }, 0, false);
            Spans spans = MultiSpansWrapper.Wrap(searcher.TopReaderContext, snq);

            Assert.IsTrue(spans.MoveNext(), "Does not have next and it should");
            Assert.AreEqual(4, spans.Doc, "doc");
            Assert.AreEqual(1, spans.Start, "start");
            Assert.AreEqual(3, spans.End, "end");

            Assert.IsTrue(spans.MoveNext(), "Does not have next and it should");
            Assert.AreEqual(5, spans.Doc, "doc");
            Assert.AreEqual(2, spans.Start, "start");
            Assert.AreEqual(4, spans.End, "end");

            Assert.IsTrue(spans.MoveNext(), "Does not have next and it should");
            Assert.AreEqual(8, spans.Doc, "doc");
            Assert.AreEqual(2, spans.Start, "start");
            Assert.AreEqual(4, spans.End, "end");

            Assert.IsTrue(spans.MoveNext(), "Does not have next and it should");
            Assert.AreEqual(9, spans.Doc, "doc");
            Assert.AreEqual(0, spans.Start, "start");
            Assert.AreEqual(2, spans.End, "end");

            Assert.IsTrue(spans.MoveNext(), "Does not have next and it should");
            Assert.AreEqual(10, spans.Doc, "doc");
            Assert.AreEqual(0, spans.Start, "start");
            Assert.AreEqual(2, spans.End, "end");
            Assert.IsTrue(spans.MoveNext() == false, "Has next and it shouldn't: " + spans.Doc);

            SpanNearQuery u1u2 = new SpanNearQuery(new SpanQuery[] { MakeSpanTermQuery("u1"), MakeSpanTermQuery("u2") }, 0, false);

            snq   = new SpanNearQuery(new SpanQuery[] { u1u2, MakeSpanTermQuery("u2") }, 1, false);
            spans = MultiSpansWrapper.Wrap(searcher.TopReaderContext, snq);
            Assert.IsTrue(spans.MoveNext(), "Does not have next and it should");
            Assert.AreEqual(4, spans.Doc, "doc");
            Assert.AreEqual(0, spans.Start, "start");
            Assert.AreEqual(3, spans.End, "end");

            Assert.IsTrue(spans.MoveNext(), "Does not have next and it should");
            //unordered spans can be subsets
            Assert.AreEqual(4, spans.Doc, "doc");
            Assert.AreEqual(1, spans.Start, "start");
            Assert.AreEqual(3, spans.End, "end");

            Assert.IsTrue(spans.MoveNext(), "Does not have next and it should");
            Assert.AreEqual(5, spans.Doc, "doc");
            Assert.AreEqual(0, spans.Start, "start");
            Assert.AreEqual(4, spans.End, "end");

            Assert.IsTrue(spans.MoveNext(), "Does not have next and it should");
            Assert.AreEqual(5, spans.Doc, "doc");
            Assert.AreEqual(2, spans.Start, "start");
            Assert.AreEqual(4, spans.End, "end");

            Assert.IsTrue(spans.MoveNext(), "Does not have next and it should");
            Assert.AreEqual(8, spans.Doc, "doc");
            Assert.AreEqual(0, spans.Start, "start");
            Assert.AreEqual(4, spans.End, "end");

            Assert.IsTrue(spans.MoveNext(), "Does not have next and it should");
            Assert.AreEqual(8, spans.Doc, "doc");
            Assert.AreEqual(2, spans.Start, "start");
            Assert.AreEqual(4, spans.End, "end");

            Assert.IsTrue(spans.MoveNext(), "Does not have next and it should");
            Assert.AreEqual(9, spans.Doc, "doc");
            Assert.AreEqual(0, spans.Start, "start");
            Assert.AreEqual(2, spans.End, "end");

            Assert.IsTrue(spans.MoveNext(), "Does not have next and it should");
            Assert.AreEqual(9, spans.Doc, "doc");
            Assert.AreEqual(0, spans.Start, "start");
            Assert.AreEqual(4, spans.End, "end");

            Assert.IsTrue(spans.MoveNext(), "Does not have next and it should");
            Assert.AreEqual(10, spans.Doc, "doc");
            Assert.AreEqual(0, spans.Start, "start");
            Assert.AreEqual(2, spans.End, "end");

            Assert.IsTrue(spans.MoveNext() == false, "Has next and it shouldn't");
        }