You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by cp...@apache.org on 2016/02/02 10:53:19 UTC
[07/21] lucene-solr git commit: also assert PointValues are the same
from LTC.assertReaderEquals
also assert PointValues are the same from LTC.assertReaderEquals
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/9332b160
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/9332b160
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/9332b160
Branch: refs/heads/master-solr-8621
Commit: 9332b1602cc0f7312fc22a3d088c549299015691
Parents: 5d5b082
Author: Mike McCandless <mi...@apache.org>
Authored: Fri Jan 29 19:09:04 2016 -0500
Committer: Mike McCandless <mi...@apache.org>
Committed: Fri Jan 29 19:09:04 2016 -0500
----------------------------------------------------------------------
.../apache/lucene/index/MultiPointValues.java | 4 +-
.../org/apache/lucene/util/LuceneTestCase.java | 64 ++++++++++++++++++++
2 files changed, 67 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9332b160/lucene/core/src/java/org/apache/lucene/index/MultiPointValues.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/MultiPointValues.java b/lucene/core/src/java/org/apache/lucene/index/MultiPointValues.java
index 12282e7..5dd4fcc 100644
--- a/lucene/core/src/java/org/apache/lucene/index/MultiPointValues.java
+++ b/lucene/core/src/java/org/apache/lucene/index/MultiPointValues.java
@@ -23,7 +23,8 @@ import java.util.List;
import org.apache.lucene.util.StringHelper;
-class MultiPointValues extends PointValues {
+/** Merges multiple {@link PointValues} into a single one. */
+public class MultiPointValues extends PointValues {
private final List<PointValues> subs;
private final List<Integer> docBases;
@@ -33,6 +34,7 @@ class MultiPointValues extends PointValues {
this.docBases = docBases;
}
+ /** Returns a {@link PointValues} merging all point values from the provided reader. */
public static PointValues get(IndexReader r) {
final List<LeafReaderContext> leaves = r.leaves();
final int size = leaves.size();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9332b160/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java b/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
index aaab030..7175837 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
@@ -1888,6 +1888,7 @@ public abstract class LuceneTestCase extends Assert {
assertDocValuesEquals(info, leftReader, rightReader);
assertDeletedDocsEquals(info, leftReader, rightReader);
assertFieldInfosEquals(info, leftReader, rightReader);
+ assertPointsEquals(info, leftReader, rightReader);
}
/**
@@ -2533,6 +2534,69 @@ public abstract class LuceneTestCase extends Assert {
assertEquals(info, left, right);
}
+ // naive silly memory heavy uninversion!! maps docID -> packed values (a Set because a given doc can be multi-valued)
+ private Map<Integer,Set<BytesRef>> uninvert(String fieldName, PointValues points) throws IOException {
+ final Map<Integer,Set<BytesRef>> docValues = new HashMap<>();
+ points.intersect(fieldName, new PointValues.IntersectVisitor() {
+ @Override
+ public void visit(int docID) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(int docID, byte[] packedValue) throws IOException {
+ if (docValues.containsKey(docID) == false) {
+ docValues.put(docID, new HashSet<BytesRef>());
+ }
+ docValues.get(docID).add(new BytesRef(packedValue.clone()));
+ }
+
+ @Override
+ public PointValues.Relation compare(byte[] minPackedValue, byte[] maxPackedValue) {
+ // We pretend our query shape is so hairy that it crosses every single cell:
+ return PointValues.Relation.CELL_CROSSES_QUERY;
+ }
+ });
+ return docValues;
+ }
+
+ public void assertPointsEquals(String info, IndexReader leftReader, IndexReader rightReader) throws IOException {
+ assertPointsEquals(info,
+ MultiFields.getMergedFieldInfos(leftReader),
+ MultiPointValues.get(leftReader),
+ MultiFields.getMergedFieldInfos(rightReader),
+ MultiPointValues.get(rightReader));
+ }
+
+ public void assertPointsEquals(String info, FieldInfos fieldInfos1, PointValues points1, FieldInfos fieldInfos2, PointValues points2) throws IOException {
+ for(FieldInfo fieldInfo1 : fieldInfos1) {
+ if (fieldInfo1.getPointDimensionCount() != 0) {
+ FieldInfo fieldInfo2 = fieldInfos2.fieldInfo(fieldInfo1.name);
+ // same dimension count?
+ assertEquals(info, fieldInfo2.getPointDimensionCount(), fieldInfo2.getPointDimensionCount());
+ // same bytes per dimension?
+ assertEquals(info, fieldInfo2.getPointNumBytes(), fieldInfo2.getPointNumBytes());
+
+ assertEquals(info + " field=" + fieldInfo1.name,
+ uninvert(fieldInfo1.name, points1),
+ uninvert(fieldInfo1.name, points2));
+ }
+ }
+
+ // make sure FieldInfos2 doesn't have any point fields that FieldInfo1 didn't have
+ for(FieldInfo fieldInfo2 : fieldInfos2) {
+ if (fieldInfo2.getPointDimensionCount() != 0) {
+ FieldInfo fieldInfo1 = fieldInfos1.fieldInfo(fieldInfo2.name);
+ // same dimension count?
+ assertEquals(info, fieldInfo2.getPointDimensionCount(), fieldInfo1.getPointDimensionCount());
+ // same bytes per dimension?
+ assertEquals(info, fieldInfo2.getPointNumBytes(), fieldInfo1.getPointNumBytes());
+
+ // we don't need to uninvert and compare here ... we did that in the first loop above
+ }
+ }
+ }
+
/** Returns true if the file exists (can be opened), false
* if it cannot be opened, and (unlike Java's
* File.exists) throws IOException if there's some