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 2013/08/20 04:05:13 UTC
svn commit: r1515686 - in /lucene/dev/branches/lucene5178/lucene:
codecs/src/java/org/apache/lucene/codecs/simpletext/
test-framework/src/java/org/apache/lucene/codecs/asserting/
test-framework/src/java/org/apache/lucene/index/ test-framework/src/java/...
Author: rmuir
Date: Tue Aug 20 02:05:12 2013
New Revision: 1515686
URL: http://svn.apache.org/r1515686
Log:
beef up tests
Modified:
lucene/dev/branches/lucene5178/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesReader.java
lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java
lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingNormsFormat.java
lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/index/AssertingAtomicReader.java
lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/index/BaseDocValuesFormatTestCase.java
lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
Modified: lucene/dev/branches/lucene5178/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5178/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesReader.java?rev=1515686&r1=1515685&r2=1515686&view=diff
==============================================================================
--- lucene/dev/branches/lucene5178/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesReader.java (original)
+++ lucene/dev/branches/lucene5178/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesReader.java Tue Aug 20 02:05:12 2013
@@ -28,7 +28,6 @@ import java.util.Locale;
import java.util.Map;
import org.apache.lucene.codecs.DocValuesProducer;
-import org.apache.lucene.codecs.DocValuesProducer.SortedSetDocsWithField;
import org.apache.lucene.index.BinaryDocValues;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.FieldInfo;
@@ -431,16 +430,17 @@ class SimpleTextDocValuesReader extends
@Override
public Bits getDocsWithField(FieldInfo field) throws IOException {
- if (field.getDocValuesType() == FieldInfo.DocValuesType.SORTED_SET) {
- return new SortedSetDocsWithField(getSortedSet(field), maxDoc);
- } else if (field.getDocValuesType() == FieldInfo.DocValuesType.SORTED) {
- return new SortedDocsWithField(getSorted(field), maxDoc);
- } else if (field.getDocValuesType() == FieldInfo.DocValuesType.BINARY) {
- return getBinaryDocsWithField(field);
- } else if (field.getDocValuesType() == FieldInfo.DocValuesType.NUMERIC) {
- return getNumericDocsWithField(field);
- } else {
- return new Bits.MatchAllBits(maxDoc);
+ switch (field.getDocValuesType()) {
+ case SORTED_SET:
+ return new SortedSetDocsWithField(getSortedSet(field), maxDoc);
+ case SORTED:
+ return new SortedDocsWithField(getSorted(field), maxDoc);
+ case BINARY:
+ return getBinaryDocsWithField(field);
+ case NUMERIC:
+ return getNumericDocsWithField(field);
+ default:
+ throw new AssertionError();
}
}
Modified: lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java?rev=1515686&r1=1515685&r2=1515686&view=diff
==============================================================================
--- lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java (original)
+++ lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java Tue Aug 20 02:05:12 2013
@@ -175,33 +175,75 @@ public class AssertingDocValuesFormat ex
checkIterator(ords.iterator(), ordCount, false);
in.addSortedSetField(field, values, docToOrdCount, ords);
}
+
+ @Override
+ public void close() throws IOException {
+ in.close();
+ }
+ }
+
+ static class AssertingNormsConsumer extends DocValuesConsumer {
+ private final DocValuesConsumer in;
+ private final int maxDoc;
+
+ AssertingNormsConsumer(DocValuesConsumer in, int maxDoc) {
+ this.in = in;
+ this.maxDoc = maxDoc;
+ }
- private <T> void checkIterator(Iterator<T> iterator, long expectedSize, boolean allowNull) {
- for (long i = 0; i < expectedSize; i++) {
- boolean hasNext = iterator.hasNext();
- assert hasNext;
- T v = iterator.next();
- assert allowNull || v != null;
- try {
- iterator.remove();
- throw new AssertionError("broken iterator (supports remove): " + iterator);
- } catch (UnsupportedOperationException expected) {
- // ok
- }
- }
- assert !iterator.hasNext();
- try {
- iterator.next();
- throw new AssertionError("broken iterator (allows next() when hasNext==false) " + iterator);
- } catch (NoSuchElementException expected) {
- // ok
+ @Override
+ public void addNumericField(FieldInfo field, Iterable<Number> values) throws IOException {
+ int count = 0;
+ for (Number v : values) {
+ assert v != null;
+ count++;
}
+ assert count == maxDoc;
+ checkIterator(values.iterator(), maxDoc, false);
+ in.addNumericField(field, values);
}
-
+
@Override
public void close() throws IOException {
in.close();
}
+
+ @Override
+ public void addBinaryField(FieldInfo field, Iterable<BytesRef> values) throws IOException {
+ throw new IllegalStateException();
+ }
+
+ @Override
+ public void addSortedField(FieldInfo field, Iterable<BytesRef> values, Iterable<Number> docToOrd) throws IOException {
+ throw new IllegalStateException();
+ }
+
+ @Override
+ public void addSortedSetField(FieldInfo field, Iterable<BytesRef> values, Iterable<Number> docToOrdCount, Iterable<Number> ords) throws IOException {
+ throw new IllegalStateException();
+ }
+ }
+
+ private static <T> void checkIterator(Iterator<T> iterator, long expectedSize, boolean allowNull) {
+ for (long i = 0; i < expectedSize; i++) {
+ boolean hasNext = iterator.hasNext();
+ assert hasNext;
+ T v = iterator.next();
+ assert allowNull || v != null;
+ try {
+ iterator.remove();
+ throw new AssertionError("broken iterator (supports remove): " + iterator);
+ } catch (UnsupportedOperationException expected) {
+ // ok
+ }
+ }
+ assert !iterator.hasNext();
+ try {
+ iterator.next();
+ throw new AssertionError("broken iterator (allows next() when hasNext==false) " + iterator);
+ } catch (NoSuchElementException expected) {
+ // ok
+ }
}
static class AssertingDocValuesProducer extends DocValuesProducer {
@@ -252,7 +294,7 @@ public class AssertingDocValuesFormat ex
Bits bits = in.getDocsWithField(field);
assert bits != null;
assert bits.length() == maxDoc;
- return bits; // TODO: add AssertingBits w/ bounds check
+ return new AssertingAtomicReader.AssertingBits(bits);
}
@Override
Modified: lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingNormsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingNormsFormat.java?rev=1515686&r1=1515685&r2=1515686&view=diff
==============================================================================
--- lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingNormsFormat.java (original)
+++ lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingNormsFormat.java Tue Aug 20 02:05:12 2013
@@ -22,7 +22,7 @@ import java.io.IOException;
import org.apache.lucene.codecs.DocValuesConsumer;
import org.apache.lucene.codecs.DocValuesProducer;
import org.apache.lucene.codecs.NormsFormat;
-import org.apache.lucene.codecs.asserting.AssertingDocValuesFormat.AssertingDocValuesConsumer;
+import org.apache.lucene.codecs.asserting.AssertingDocValuesFormat.AssertingNormsConsumer;
import org.apache.lucene.codecs.asserting.AssertingDocValuesFormat.AssertingDocValuesProducer;
import org.apache.lucene.codecs.lucene42.Lucene42NormsFormat;
import org.apache.lucene.index.SegmentReadState;
@@ -38,7 +38,7 @@ public class AssertingNormsFormat extend
public DocValuesConsumer normsConsumer(SegmentWriteState state) throws IOException {
DocValuesConsumer consumer = in.normsConsumer(state);
assert consumer != null;
- return new AssertingDocValuesConsumer(consumer, state.segmentInfo.getDocCount());
+ return new AssertingNormsConsumer(consumer, state.segmentInfo.getDocCount());
}
@Override
Modified: lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/index/AssertingAtomicReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/index/AssertingAtomicReader.java?rev=1515686&r1=1515685&r2=1515686&view=diff
==============================================================================
--- lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/index/AssertingAtomicReader.java (original)
+++ lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/index/AssertingAtomicReader.java Tue Aug 20 02:05:12 2013
@@ -607,12 +607,33 @@ public class AssertingAtomicReader exten
return null;
}
}
+
+ /** Wraps a Bits but with additional asserts */
+ public static class AssertingBits implements Bits {
+ final Bits in;
+
+ public AssertingBits(Bits in) {
+ this.in = in;
+ }
+
+ @Override
+ public boolean get(int index) {
+ assert index >= 0 && index < length();
+ return in.get(index);
+ }
+
+ @Override
+ public int length() {
+ return in.length();
+ }
+ }
@Override
public Bits getLiveDocs() {
Bits liveDocs = super.getLiveDocs();
if (liveDocs != null) {
assert maxDoc() == liveDocs.length();
+ liveDocs = new AssertingBits(liveDocs);
} else {
assert maxDoc() == numDocs();
assert !hasDeletions();
@@ -628,6 +649,7 @@ public class AssertingAtomicReader exten
assert fi != null;
assert fi.hasDocValues();
assert maxDoc() == docsWithField.length();
+ docsWithField = new AssertingBits(docsWithField);
} else {
assert fi == null || fi.hasDocValues() == false;
}
Modified: lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/index/BaseDocValuesFormatTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/index/BaseDocValuesFormatTestCase.java?rev=1515686&r1=1515685&r2=1515686&view=diff
==============================================================================
--- lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/index/BaseDocValuesFormatTestCase.java (original)
+++ lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/index/BaseDocValuesFormatTestCase.java Tue Aug 20 02:05:12 2013
@@ -26,6 +26,7 @@ import java.util.Map.Entry;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
+import java.util.concurrent.CountDownLatch;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.MockAnalyzer;
@@ -673,7 +674,7 @@ public abstract class BaseDocValuesForma
iwriter.close();
SortedDocValues dv = getOnlySegmentReader(ireader).getSortedDocValues("field");
- if (codecSupportsDocsWithField("field")) {
+ if (defaultCodecSupportsDocsWithField()) {
assertEquals(-1, dv.getOrd(0));
assertEquals(0, dv.getValueCount());
} else {
@@ -733,7 +734,7 @@ public abstract class BaseDocValuesForma
BytesRef scratch = new BytesRef();
dv.lookupOrd(dv.getOrd(0), scratch);
assertEquals(new BytesRef("hello world 2"), scratch);
- if (codecSupportsDocsWithField("dv")) {
+ if (defaultCodecSupportsDocsWithField()) {
assertEquals(-1, dv.getOrd(1));
}
dv.get(1, scratch);
@@ -1115,7 +1116,7 @@ public abstract class BaseDocValuesForma
doc.add(newTextField("id", "noValue", Field.Store.YES));
w.addDocument(doc);
}
- if (!codecSupportsDocsWithField("field")) {
+ if (!defaultCodecSupportsDocsWithField()) {
BytesRef bytesRef = new BytesRef();
hash.add(bytesRef); // add empty value for the gaps
}
@@ -1242,7 +1243,7 @@ public abstract class BaseDocValuesForma
}
private void doTestMissingVsFieldCache(LongProducer longs) throws Exception {
- assumeTrue("Codec does not support getDocsWithField", codecSupportsDocsWithField("dv"));
+ assumeTrue("Codec does not support getDocsWithField", defaultCodecSupportsDocsWithField());
Directory dir = newDirectory();
IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));
RandomIndexWriter writer = new RandomIndexWriter(random(), dir, conf);
@@ -2345,7 +2346,7 @@ public abstract class BaseDocValuesForma
}
public void testTwoNumbersOneMissing() throws IOException {
- assumeTrue("Codec does not support getDocsWithField", codecSupportsDocsWithField("dv1"));
+ assumeTrue("Codec does not support getDocsWithField", defaultCodecSupportsDocsWithField());
Directory directory = newDirectory();
IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, null);
conf.setMergePolicy(newLogMergePolicy());
@@ -2374,7 +2375,7 @@ public abstract class BaseDocValuesForma
}
public void testTwoNumbersOneMissingWithMerging() throws IOException {
- assumeTrue("Codec does not support getDocsWithField", codecSupportsDocsWithField("dv1"));
+ assumeTrue("Codec does not support getDocsWithField", defaultCodecSupportsDocsWithField());
Directory directory = newDirectory();
IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, null);
conf.setMergePolicy(newLogMergePolicy());
@@ -2404,7 +2405,7 @@ public abstract class BaseDocValuesForma
}
public void testThreeNumbersOneMissingWithMerging() throws IOException {
- assumeTrue("Codec does not support getDocsWithField", codecSupportsDocsWithField("dv1"));
+ assumeTrue("Codec does not support getDocsWithField", defaultCodecSupportsDocsWithField());
Directory directory = newDirectory();
IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, null);
conf.setMergePolicy(newLogMergePolicy());
@@ -2440,7 +2441,7 @@ public abstract class BaseDocValuesForma
}
public void testTwoBytesOneMissing() throws IOException {
- assumeTrue("Codec does not support getDocsWithField", codecSupportsDocsWithField("dv1"));
+ assumeTrue("Codec does not support getDocsWithField", defaultCodecSupportsDocsWithField());
Directory directory = newDirectory();
IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, null);
conf.setMergePolicy(newLogMergePolicy());
@@ -2472,7 +2473,7 @@ public abstract class BaseDocValuesForma
}
public void testTwoBytesOneMissingWithMerging() throws IOException {
- assumeTrue("Codec does not support getDocsWithField", codecSupportsDocsWithField("dv1"));
+ assumeTrue("Codec does not support getDocsWithField", defaultCodecSupportsDocsWithField());
Directory directory = newDirectory();
IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, null);
conf.setMergePolicy(newLogMergePolicy());
@@ -2505,7 +2506,7 @@ public abstract class BaseDocValuesForma
}
public void testThreeBytesOneMissingWithMerging() throws IOException {
- assumeTrue("Codec does not support getDocsWithField", codecSupportsDocsWithField("dv1"));
+ assumeTrue("Codec does not support getDocsWithField", defaultCodecSupportsDocsWithField());
Directory directory = newDirectory();
IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, null);
conf.setMergePolicy(newLogMergePolicy());
@@ -2709,6 +2710,243 @@ public abstract class BaseDocValuesForma
ar.close();
d.close();
}
+
+ /** Tests dv against stored fields with threads (binary/numeric/sorted, no missing) */
+ public void testThreads() throws Exception {
+ Directory dir = newDirectory();
+ IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));
+ RandomIndexWriter writer = new RandomIndexWriter(random(), dir, conf);
+ Document doc = new Document();
+ Field idField = new StringField("id", "", Field.Store.NO);
+ Field storedBinField = new StoredField("storedBin", new byte[0]);
+ Field dvBinField = new BinaryDocValuesField("dvBin", new BytesRef());
+ Field dvSortedField = new SortedDocValuesField("dvSorted", new BytesRef());
+ Field storedNumericField = new StoredField("storedNum", "");
+ Field dvNumericField = new NumericDocValuesField("dvNum", 0);
+ doc.add(idField);
+ doc.add(storedBinField);
+ doc.add(dvBinField);
+ doc.add(dvSortedField);
+ doc.add(storedNumericField);
+ doc.add(dvNumericField);
+
+ // index some docs
+ int numDocs = atLeast(300);
+ for (int i = 0; i < numDocs; i++) {
+ idField.setStringValue(Integer.toString(i));
+ int length = _TestUtil.nextInt(random(), 0, 8);
+ byte buffer[] = new byte[length];
+ random().nextBytes(buffer);
+ storedBinField.setBytesValue(buffer);
+ dvBinField.setBytesValue(buffer);
+ dvSortedField.setBytesValue(buffer);
+ long numericValue = random().nextLong();
+ storedNumericField.setStringValue(Long.toString(numericValue));
+ dvNumericField.setLongValue(numericValue);
+ writer.addDocument(doc);
+ if (random().nextInt(31) == 0) {
+ writer.commit();
+ }
+ }
+
+ // delete some docs
+ int numDeletions = random().nextInt(numDocs/10);
+ for (int i = 0; i < numDeletions; i++) {
+ int id = random().nextInt(numDocs);
+ writer.deleteDocuments(new Term("id", Integer.toString(id)));
+ }
+ writer.close();
+
+ // compare
+ final DirectoryReader ir = DirectoryReader.open(dir);
+ int numThreads = _TestUtil.nextInt(random(), 2, 7);
+ Thread threads[] = new Thread[numThreads];
+ final CountDownLatch startingGun = new CountDownLatch(1);
+
+ for (int i = 0; i < threads.length; i++) {
+ threads[i] = new Thread() {
+ @Override
+ public void run() {
+ try {
+ startingGun.await();
+ for (AtomicReaderContext context : ir.leaves()) {
+ AtomicReader r = context.reader();
+ BinaryDocValues binaries = r.getBinaryDocValues("dvBin");
+ SortedDocValues sorted = r.getSortedDocValues("dvSorted");
+ NumericDocValues numerics = r.getNumericDocValues("dvNum");
+ for (int j = 0; j < r.maxDoc(); j++) {
+ BytesRef binaryValue = r.document(j).getBinaryValue("storedBin");
+ BytesRef scratch = new BytesRef();
+ binaries.get(j, scratch);
+ assertEquals(binaryValue, scratch);
+ sorted.get(j, scratch);
+ assertEquals(binaryValue, scratch);
+ String expected = r.document(j).get("storedNum");
+ assertEquals(Long.parseLong(expected), numerics.get(j));
+ }
+ }
+ _TestUtil.checkReader(ir);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ };
+ threads[i].start();
+ }
+ startingGun.countDown();
+ for (Thread t : threads) {
+ t.join();
+ }
+ ir.close();
+ dir.close();
+ }
+
+ /** Tests dv against stored fields with threads (all types + missing) */
+ public void testThreads2() throws Exception {
+ assumeTrue("Codec does not support getDocsWithField", defaultCodecSupportsDocsWithField());
+ assumeTrue("Codec does not support SORTED_SET", defaultCodecSupportsSortedSet());
+ Directory dir = newDirectory();
+ IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));
+ RandomIndexWriter writer = new RandomIndexWriter(random(), dir, conf);
+ Field idField = new StringField("id", "", Field.Store.NO);
+ Field storedBinField = new StoredField("storedBin", new byte[0]);
+ Field dvBinField = new BinaryDocValuesField("dvBin", new BytesRef());
+ Field dvSortedField = new SortedDocValuesField("dvSorted", new BytesRef());
+ Field storedNumericField = new StoredField("storedNum", "");
+ Field dvNumericField = new NumericDocValuesField("dvNum", 0);
+
+ // index some docs
+ int numDocs = atLeast(300);
+ for (int i = 0; i < numDocs; i++) {
+ idField.setStringValue(Integer.toString(i));
+ int length = _TestUtil.nextInt(random(), 0, 8);
+ byte buffer[] = new byte[length];
+ random().nextBytes(buffer);
+ storedBinField.setBytesValue(buffer);
+ dvBinField.setBytesValue(buffer);
+ dvSortedField.setBytesValue(buffer);
+ long numericValue = random().nextLong();
+ storedNumericField.setStringValue(Long.toString(numericValue));
+ dvNumericField.setLongValue(numericValue);
+ Document doc = new Document();
+ doc.add(idField);
+ if (random().nextInt(4) > 0) {
+ doc.add(storedBinField);
+ doc.add(dvBinField);
+ doc.add(dvSortedField);
+ }
+ if (random().nextInt(4) > 0) {
+ doc.add(storedNumericField);
+ doc.add(dvNumericField);
+ }
+ int numSortedSetFields = random().nextInt(3);
+ Set<String> values = new TreeSet<String>();
+ for (int j = 0; j < numSortedSetFields; j++) {
+ values.add(_TestUtil.randomSimpleString(random()));
+ }
+ for (String v : values) {
+ doc.add(new SortedSetDocValuesField("dvSortedSet", new BytesRef(v)));
+ doc.add(new StoredField("storedSortedSet", v));
+ }
+ writer.addDocument(doc);
+ if (random().nextInt(31) == 0) {
+ writer.commit();
+ }
+ }
+
+ // delete some docs
+ int numDeletions = random().nextInt(numDocs/10);
+ for (int i = 0; i < numDeletions; i++) {
+ int id = random().nextInt(numDocs);
+ writer.deleteDocuments(new Term("id", Integer.toString(id)));
+ }
+ writer.close();
+
+ // compare
+ final DirectoryReader ir = DirectoryReader.open(dir);
+ int numThreads = _TestUtil.nextInt(random(), 2, 7);
+ Thread threads[] = new Thread[numThreads];
+ final CountDownLatch startingGun = new CountDownLatch(1);
+
+ for (int i = 0; i < threads.length; i++) {
+ threads[i] = new Thread() {
+ @Override
+ public void run() {
+ try {
+ startingGun.await();
+ for (AtomicReaderContext context : ir.leaves()) {
+ AtomicReader r = context.reader();
+ BinaryDocValues binaries = r.getBinaryDocValues("dvBin");
+ Bits binaryBits = r.getDocsWithField("dvBin");
+ SortedDocValues sorted = r.getSortedDocValues("dvSorted");
+ Bits sortedBits = r.getDocsWithField("dvSorted");
+ NumericDocValues numerics = r.getNumericDocValues("dvNum");
+ Bits numericBits = r.getDocsWithField("dvNum");
+ SortedSetDocValues sortedSet = r.getSortedSetDocValues("dvSortedSet");
+ Bits sortedSetBits = r.getDocsWithField("dvSortedSet");
+ for (int j = 0; j < r.maxDoc(); j++) {
+ BytesRef binaryValue = r.document(j).getBinaryValue("storedBin");
+ if (binaryValue != null) {
+ if (binaries != null) {
+ BytesRef scratch = new BytesRef();
+ binaries.get(j, scratch);
+ assertEquals(binaryValue, scratch);
+ sorted.get(j, scratch);
+ assertEquals(binaryValue, scratch);
+ assertTrue(binaryBits.get(j));
+ assertTrue(sortedBits.get(j));
+ }
+ } else if (binaries != null) {
+ assertFalse(binaryBits.get(j));
+ assertFalse(sortedBits.get(j));
+ assertEquals(-1, sorted.getOrd(j));
+ }
+
+ String number = r.document(j).get("storedNum");
+ if (number != null) {
+ if (numerics != null) {
+ assertEquals(Long.parseLong(number), numerics.get(j));
+ }
+ } else if (numerics != null) {
+ assertFalse(numericBits.get(j));
+ assertEquals(0, numerics.get(j));
+ }
+
+ String values[] = r.document(j).getValues("storedSortedSet");
+ if (values.length > 0) {
+ assertNotNull(sortedSet);
+ sortedSet.setDocument(j);
+ for (int i = 0; i < values.length; i++) {
+ long ord = sortedSet.nextOrd();
+ assertTrue(ord != SortedSetDocValues.NO_MORE_ORDS);
+ BytesRef value = new BytesRef();
+ sortedSet.lookupOrd(ord, value);
+ assertEquals(values[i], value.utf8ToString());
+ }
+ assertEquals(SortedSetDocValues.NO_MORE_ORDS, sortedSet.nextOrd());
+ assertTrue(sortedSetBits.get(j));
+ } else if (sortedSet != null) {
+ sortedSet.setDocument(j);
+ assertEquals(SortedSetDocValues.NO_MORE_ORDS, sortedSet.nextOrd());
+ assertFalse(sortedSetBits.get(j));
+ }
+ }
+ }
+ _TestUtil.checkReader(ir);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ };
+ threads[i].start();
+ }
+ startingGun.countDown();
+ for (Thread t : threads) {
+ t.join();
+ }
+ ir.close();
+ dir.close();
+ }
protected boolean codecAcceptsHugeBinaryValues(String field) {
return true;
Modified: lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java?rev=1515686&r1=1515685&r2=1515686&view=diff
==============================================================================
--- lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java (original)
+++ lucene/dev/branches/lucene5178/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java Tue Aug 20 02:05:12 2013
@@ -1369,11 +1369,11 @@ public abstract class LuceneTestCase ext
return true;
}
- /** Returns true if the codec for the field "supports" docsWithField
+ /** Returns true if the codec "supports" docsWithField
* (other codecs return MatchAllBits, because you couldnt write missing values before) */
- public static boolean codecSupportsDocsWithField(String field) {
- String name = _TestUtil.getDocValuesFormat(Codec.getDefault(), field);
- if (name.equals("Lucene40") || name.equals("Lucene42")) {
+ public static boolean defaultCodecSupportsDocsWithField() {
+ String name = Codec.getDefault().getName();
+ if (name.equals("Lucene40") || name.equals("Lucene41") || name.equals("Lucene42")) {
return false;
}
return true;