public void AssertDocValuesEquals(string info, IndexReader leftReader, IndexReader rightReader)
{
ISet<string> leftFields = GetDVFields(leftReader);
ISet<string> rightFields = GetDVFields(rightReader);
Assert.AreEqual(leftFields, rightFields, info);
foreach (string field in leftFields)
{
// TODO: clean this up... very messy
{
NumericDocValues leftValues = MultiDocValues.GetNumericValues(leftReader, field);
NumericDocValues rightValues = MultiDocValues.GetNumericValues(rightReader, field);
if (leftValues != null && rightValues != null)
{
AssertDocValuesEquals(info, leftReader.MaxDoc, leftValues, rightValues);
}
else
{
Assert.IsNull(leftValues, info);
Assert.IsNull(rightValues, info);
}
}
{
BinaryDocValues leftValues = MultiDocValues.GetBinaryValues(leftReader, field);
BinaryDocValues rightValues = MultiDocValues.GetBinaryValues(rightReader, field);
if (leftValues != null && rightValues != null)
{
BytesRef scratchLeft = new BytesRef();
BytesRef scratchRight = new BytesRef();
for (int docID = 0; docID < leftReader.MaxDoc; docID++)
{
leftValues.Get(docID, scratchLeft);
rightValues.Get(docID, scratchRight);
Assert.AreEqual(scratchLeft, scratchRight, info);
}
}
else
{
Assert.IsNull(leftValues, info);
Assert.IsNull(rightValues, info);
}
}
{
SortedDocValues leftValues = MultiDocValues.GetSortedValues(leftReader, field);
SortedDocValues rightValues = MultiDocValues.GetSortedValues(rightReader, field);
if (leftValues != null && rightValues != null)
{
// numOrds
Assert.AreEqual(leftValues.ValueCount, rightValues.ValueCount, info);
// ords
BytesRef scratchLeft = new BytesRef();
BytesRef scratchRight = new BytesRef();
for (int i = 0; i < leftValues.ValueCount; i++)
{
leftValues.LookupOrd(i, scratchLeft);
rightValues.LookupOrd(i, scratchRight);
Assert.AreEqual(scratchLeft, scratchRight, info);
}
// bytes
for (int docID = 0; docID < leftReader.MaxDoc; docID++)
{
leftValues.Get(docID, scratchLeft);
rightValues.Get(docID, scratchRight);
Assert.AreEqual(scratchLeft, scratchRight, info);
}
}
else
{
Assert.IsNull(leftValues, info);
Assert.IsNull(rightValues, info);
}
}
{
SortedSetDocValues leftValues = MultiDocValues.GetSortedSetValues(leftReader, field);
SortedSetDocValues rightValues = MultiDocValues.GetSortedSetValues(rightReader, field);
if (leftValues != null && rightValues != null)
{
// numOrds
Assert.AreEqual(leftValues.ValueCount, rightValues.ValueCount, info);
// ords
BytesRef scratchLeft = new BytesRef();
BytesRef scratchRight = new BytesRef();
for (int i = 0; i < leftValues.ValueCount; i++)
{
leftValues.LookupOrd(i, scratchLeft);
rightValues.LookupOrd(i, scratchRight);
Assert.AreEqual(scratchLeft, scratchRight, info);
}
// ord lists
for (int docID = 0; docID < leftReader.MaxDoc; docID++)
{
leftValues.Document = docID;
rightValues.Document = docID;
long ord;
while ((ord = leftValues.NextOrd()) != SortedSetDocValues.NO_MORE_ORDS)
{
Assert.AreEqual(ord, rightValues.NextOrd(), info);
}
Assert.AreEqual(SortedSetDocValues.NO_MORE_ORDS, rightValues.NextOrd(), info);
}
}
else
{
Assert.IsNull(leftValues, info);
Assert.IsNull(rightValues, info);
}
}
{
Bits leftBits = MultiDocValues.GetDocsWithField(leftReader, field);
Bits rightBits = MultiDocValues.GetDocsWithField(rightReader, field);
if (leftBits != null && rightBits != null)
{
Assert.AreEqual(leftBits.Length(), rightBits.Length(), info);
for (int i = 0; i < leftBits.Length(); i++)
{
Assert.AreEqual(leftBits.Get(i), rightBits.Get(i), info);
}
}
else
{
Assert.IsNull(leftBits, info);
Assert.IsNull(rightBits, info);
}
}
}
}