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 2011/11/20 11:14:16 UTC

svn commit: r1204145 - in /lucene/dev/trunk/lucene/contrib/memory/src: java/org/apache/lucene/index/memory/MemoryIndex.java test/org/apache/lucene/index/memory/MemoryIndexTest.java

Author: rmuir
Date: Sun Nov 20 10:14:15 2011
New Revision: 1204145

URL: http://svn.apache.org/viewvc?rev=1204145&view=rev
Log:
LUCENE-3580: fix broken DISIs in contrib/memory

Modified:
    lucene/dev/trunk/lucene/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java
    lucene/dev/trunk/lucene/contrib/memory/src/test/org/apache/lucene/index/memory/MemoryIndexTest.java

Modified: lucene/dev/trunk/lucene/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java?rev=1204145&r1=1204144&r2=1204145&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java (original)
+++ lucene/dev/trunk/lucene/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java Sun Nov 20 10:14:15 2011
@@ -974,26 +974,28 @@ public class MemoryIndex {
       private ArrayIntList positions;
       private boolean hasNext;
       private Bits liveDocs;
+      private int doc = -1;
 
       public DocsEnum reset(Bits liveDocs, ArrayIntList positions) {
         this.liveDocs = liveDocs;
         this.positions = positions;
         hasNext = true;
+        doc = -1;
         return this;
       }
 
       @Override
       public int docID() {
-        return 0;
+        return doc;
       }
 
       @Override
       public int nextDoc() {
         if (hasNext && (liveDocs == null || liveDocs.get(0))) {
           hasNext = false;
-          return 0;
+          return doc = 0;
         } else {
-          return NO_MORE_DOCS;
+          return doc = NO_MORE_DOCS;
         }
       }
 
@@ -1013,27 +1015,29 @@ public class MemoryIndex {
       private int posUpto;
       private boolean hasNext;
       private Bits liveDocs;
+      private int doc = -1;
 
       public DocsAndPositionsEnum reset(Bits liveDocs, ArrayIntList positions) {
         this.liveDocs = liveDocs;
         this.positions = positions;
         posUpto = 0;
         hasNext = true;
+        doc = -1;
         return this;
       }
 
       @Override
       public int docID() {
-        return 0;
+        return doc;
       }
 
       @Override
       public int nextDoc() {
         if (hasNext && (liveDocs == null || liveDocs.get(0))) {
           hasNext = false;
-          return 0;
+          return doc = 0;
         } else {
-          return NO_MORE_DOCS;
+          return doc = NO_MORE_DOCS;
         }
       }
 

Modified: lucene/dev/trunk/lucene/contrib/memory/src/test/org/apache/lucene/index/memory/MemoryIndexTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/memory/src/test/org/apache/lucene/index/memory/MemoryIndexTest.java?rev=1204145&r1=1204144&r2=1204145&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/memory/src/test/org/apache/lucene/index/memory/MemoryIndexTest.java (original)
+++ lucene/dev/trunk/lucene/contrib/memory/src/test/org/apache/lucene/index/memory/MemoryIndexTest.java Sun Nov 20 10:14:15 2011
@@ -32,14 +32,19 @@ import org.apache.lucene.analysis.MockTo
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.TextField;
+import org.apache.lucene.index.DocsAndPositionsEnum;
+import org.apache.lucene.index.DocsEnum;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.TermsEnum;
 import org.apache.lucene.index.codecs.lucene40.Lucene40PostingsFormat;
 import org.apache.lucene.queryparser.classic.QueryParser;
+import org.apache.lucene.search.DocIdSetIterator;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.TopDocs;
 import org.apache.lucene.store.Directory;
+import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util._TestUtil;
 
 /**
@@ -177,4 +182,44 @@ public class MemoryIndexTest extends Bas
       return _TestUtil.randomUnicodeString(random);
     }
   }
+  
+  public void testDocsEnumStart() throws Exception {
+    Analyzer analyzer = new MockAnalyzer(random);
+    MemoryIndex memory = new MemoryIndex();
+    memory.addField("foo", "bar", analyzer);
+    IndexReader reader = memory.createSearcher().getIndexReader();
+    DocsEnum disi = reader.termDocsEnum(null, "foo", new BytesRef("bar"));
+    int docid = disi.docID();
+    assertTrue(docid == -1 || docid == DocIdSetIterator.NO_MORE_DOCS);
+    assertTrue(disi.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
+    
+    // now reuse and check again
+    TermsEnum te = reader.terms("foo").iterator(null);
+    assertTrue(te.seekExact(new BytesRef("bar"), true));
+    disi = te.docs(null, disi);
+    docid = disi.docID();
+    assertTrue(docid == -1 || docid == DocIdSetIterator.NO_MORE_DOCS);
+    assertTrue(disi.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
+    reader.close();
+  }
+  
+  public void testDocsAndPositionsEnumStart() throws Exception {
+    Analyzer analyzer = new MockAnalyzer(random);
+    MemoryIndex memory = new MemoryIndex();
+    memory.addField("foo", "bar", analyzer);
+    IndexReader reader = memory.createSearcher().getIndexReader();
+    DocsAndPositionsEnum disi = reader.termPositionsEnum(null, "foo", new BytesRef("bar"));
+    int docid = disi.docID();
+    assertTrue(docid == -1 || docid == DocIdSetIterator.NO_MORE_DOCS);
+    assertTrue(disi.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
+    
+    // now reuse and check again
+    TermsEnum te = reader.terms("foo").iterator(null);
+    assertTrue(te.seekExact(new BytesRef("bar"), true));
+    disi = te.docsAndPositions(null, disi);
+    docid = disi.docID();
+    assertTrue(docid == -1 || docid == DocIdSetIterator.NO_MORE_DOCS);
+    assertTrue(disi.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
+    reader.close();
+  }
 }