[
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: [email protected]
For additional commands, e-mail: [email protected]