[ 
https://issues.apache.org/jira/browse/LUCENE-2736?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Shai Erera resolved LUCENE-2736.
--------------------------------

       Resolution: Fixed
    Fix Version/s: 4.0
                   3.2
    Lucene Fields: [New, Patch Available]  (was: [New])

Thanks Doron - I changed the javadocs as you suggest.

Committed revision 1104159 (3x).
Committed revision 1104167 (trunk).

Thanks Hardy for reporting that !

> Wrong implementation of DocIdSetIterator.advance 
> -------------------------------------------------
>
>                 Key: LUCENE-2736
>                 URL: https://issues.apache.org/jira/browse/LUCENE-2736
>             Project: Lucene - Java
>          Issue Type: Bug
>          Components: core/search
>    Affects Versions: 3.2, 4.0
>            Reporter: Hardy Ferentschik
>            Assignee: Shai Erera
>             Fix For: 3.2, 4.0
>
>         Attachments: LUCENE-2736.patch
>
>
> Implementations of {{DocIdSetIterator}} behave differently when advanced is 
> called. Taking the following test for {{OpenBitSet}}, {{DocIdBitSet}} and 
> {{SortedVIntList}} only {{SortedVIntList}} passes the test:
> {code:title=org.apache.lucene.search.TestDocIdSet.java|borderStyle=solid}
> ...
>       public void testAdvanceWithOpenBitSet() throws IOException {
>               DocIdSet idSet = new OpenBitSet( new long[] { 1121 }, 1 );  // 
> bits 0, 5, 6, 10
>               assertAdvance( idSet );
>       }
>       public void testAdvanceDocIdBitSet() throws IOException {
>               BitSet bitSet = new BitSet();
>               bitSet.set( 0 );
>               bitSet.set( 5 );
>               bitSet.set( 6 );
>               bitSet.set( 10 );
>               DocIdSet idSet = new DocIdBitSet(bitSet);
>               assertAdvance( idSet );
>       }
>       public void testAdvanceWithSortedVIntList() throws IOException {
>               DocIdSet idSet = new SortedVIntList( 0, 5, 6, 10 );
>               assertAdvance( idSet );
>       }       
>       private void assertAdvance(DocIdSet idSet) throws IOException {
>               DocIdSetIterator iter = idSet.iterator();
>               int docId = iter.nextDoc();
>               assertEquals( "First doc id should be 0", 0, docId );
>               docId = iter.nextDoc();
>               assertEquals( "Second doc id should be 5", 5, docId );
>               docId = iter.advance( 5 );
>               assertEquals( "Advancing iterator should return the next doc 
> id", 6, docId );
>       }
> {code}
> The javadoc for {{advance}} says:
> {quote}
> Advances to the first *beyond* the current whose document number is greater 
> than or equal to _target_.
> {quote}
> This seems to indicate that {{SortedVIntList}} behaves correctly, whereas the 
> other two don't. 
> Just looking at the {{DocIdBitSet}} implementation advance is implemented as:
> {code}
> bitSet.nextSetBit(target);
> {code}
> where the docs of {{nextSetBit}} say:
> {quote}
> Returns the index of the first bit that is set to true that occurs *on or 
> after* the specified starting index
> {quote}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to