Wrong implementation of DocIdSetIterator.advance
-------------------------------------------------
Key: LUCENE-2736
URL: https://issues.apache.org/jira/browse/LUCENE-2736
Project: Lucene - Java
Issue Type: Bug
Components: Other
Affects Versions: 3.0.2, 4.0
Reporter: Hardy Ferentschik
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.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]