[ 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