mirror of
https://github.com/apache/lucene.git
synced 2025-02-13 05:25:50 +00:00
remove troublesome float tests since facets only actually expose doubles
This commit is contained in:
parent
acbabac7b5
commit
885ad49105
@ -23,11 +23,9 @@ import java.util.Set;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import org.apache.lucene.document.DoublePoint;
|
||||
import org.apache.lucene.document.FloatPoint;
|
||||
import org.apache.lucene.document.LongPoint;
|
||||
import org.apache.lucene.document.Document;
|
||||
import org.apache.lucene.document.DoubleDocValuesField;
|
||||
import org.apache.lucene.document.FloatDocValuesField;
|
||||
import org.apache.lucene.document.NumericDocValuesField;
|
||||
import org.apache.lucene.facet.DrillDownQuery;
|
||||
import org.apache.lucene.facet.DrillSideways;
|
||||
@ -52,7 +50,6 @@ import org.apache.lucene.queries.function.FunctionValues;
|
||||
import org.apache.lucene.queries.function.ValueSource;
|
||||
import org.apache.lucene.queries.function.docvalues.DoubleDocValues;
|
||||
import org.apache.lucene.queries.function.valuesource.DoubleFieldSource;
|
||||
import org.apache.lucene.queries.function.valuesource.FloatFieldSource;
|
||||
import org.apache.lucene.queries.function.valuesource.LongFieldSource;
|
||||
import org.apache.lucene.search.Explanation;
|
||||
import org.apache.lucene.search.IndexSearcher;
|
||||
@ -321,37 +318,6 @@ public class TestRangeFacetCounts extends FacetTestCase {
|
||||
IOUtils.close(r, d);
|
||||
}
|
||||
|
||||
public void testBasicFloat() throws Exception {
|
||||
Directory d = newDirectory();
|
||||
RandomIndexWriter w = new RandomIndexWriter(random(), d);
|
||||
Document doc = new Document();
|
||||
FloatDocValuesField field = new FloatDocValuesField("field", 0.0f);
|
||||
doc.add(field);
|
||||
for(long l=0;l<100;l++) {
|
||||
field.setFloatValue(l);
|
||||
w.addDocument(doc);
|
||||
}
|
||||
|
||||
IndexReader r = w.getReader();
|
||||
|
||||
FacetsCollector fc = new FacetsCollector();
|
||||
|
||||
IndexSearcher s = newSearcher(r);
|
||||
s.search(new MatchAllDocsQuery(), fc);
|
||||
|
||||
Facets facets = new DoubleRangeFacetCounts("field", new FloatFieldSource("field"), fc,
|
||||
new DoubleRange("less than 10", 0.0f, true, 10.0f, false),
|
||||
new DoubleRange("less than or equal to 10", 0.0f, true, 10.0f, true),
|
||||
new DoubleRange("over 90", 90.0f, false, 100.0f, false),
|
||||
new DoubleRange("90 or above", 90.0f, true, 100.0f, false),
|
||||
new DoubleRange("over 1000", 1000.0f, false, Double.POSITIVE_INFINITY, false));
|
||||
|
||||
assertEquals("dim=field path=[] value=21 childCount=5\n less than 10 (10)\n less than or equal to 10 (11)\n over 90 (9)\n 90 or above (10)\n over 1000 (0)\n",
|
||||
facets.getTopChildren(10, "field").toString());
|
||||
w.close();
|
||||
IOUtils.close(r, d);
|
||||
}
|
||||
|
||||
public void testRandomLongs() throws Exception {
|
||||
Directory dir = newDirectory();
|
||||
RandomIndexWriter w = new RandomIndexWriter(random(), dir);
|
||||
@ -499,175 +465,6 @@ public class TestRangeFacetCounts extends FacetTestCase {
|
||||
IOUtils.close(r, dir);
|
||||
}
|
||||
|
||||
public void testRandomFloats() throws Exception {
|
||||
Directory dir = newDirectory();
|
||||
RandomIndexWriter w = new RandomIndexWriter(random(), dir);
|
||||
|
||||
int numDocs = atLeast(1000);
|
||||
float[] values = new float[numDocs];
|
||||
float minValue = Float.POSITIVE_INFINITY;
|
||||
float maxValue = Float.NEGATIVE_INFINITY;
|
||||
for(int i=0;i<numDocs;i++) {
|
||||
Document doc = new Document();
|
||||
float v = random().nextFloat();
|
||||
values[i] = v;
|
||||
doc.add(new FloatDocValuesField("field", v));
|
||||
doc.add(new FloatPoint("field", v));
|
||||
w.addDocument(doc);
|
||||
minValue = Math.min(minValue, v);
|
||||
maxValue = Math.max(maxValue, v);
|
||||
}
|
||||
IndexReader r = w.getReader();
|
||||
|
||||
IndexSearcher s = newSearcher(r, false);
|
||||
FacetsConfig config = new FacetsConfig();
|
||||
|
||||
int numIters = atLeast(10);
|
||||
for(int iter=0;iter<numIters;iter++) {
|
||||
if (VERBOSE) {
|
||||
System.out.println("TEST: iter=" + iter);
|
||||
}
|
||||
int numRange = TestUtil.nextInt(random(), 1, 5);
|
||||
DoubleRange[] ranges = new DoubleRange[numRange];
|
||||
int[] expectedCounts = new int[numRange];
|
||||
float minAcceptedValue = Float.POSITIVE_INFINITY;
|
||||
float maxAcceptedValue = Float.NEGATIVE_INFINITY;
|
||||
boolean[] rangeMinIncl = new boolean[numRange];
|
||||
boolean[] rangeMaxIncl = new boolean[numRange];
|
||||
if (VERBOSE) {
|
||||
System.out.println("TEST: " + numRange + " ranges");
|
||||
}
|
||||
for(int rangeID=0;rangeID<numRange;rangeID++) {
|
||||
double min;
|
||||
if (rangeID > 0 && random().nextInt(10) == 7) {
|
||||
// Use an existing boundary:
|
||||
DoubleRange prevRange = ranges[random().nextInt(rangeID)];
|
||||
if (random().nextBoolean()) {
|
||||
min = prevRange.min;
|
||||
} else {
|
||||
min = prevRange.max;
|
||||
}
|
||||
} else {
|
||||
min = random().nextDouble();
|
||||
}
|
||||
double max;
|
||||
if (rangeID > 0 && random().nextInt(10) == 7) {
|
||||
// Use an existing boundary:
|
||||
DoubleRange prevRange = ranges[random().nextInt(rangeID)];
|
||||
if (random().nextBoolean()) {
|
||||
max = prevRange.min;
|
||||
} else {
|
||||
max = prevRange.max;
|
||||
}
|
||||
} else {
|
||||
max = random().nextDouble();
|
||||
}
|
||||
|
||||
if (min > max) {
|
||||
double x = min;
|
||||
min = max;
|
||||
max = x;
|
||||
}
|
||||
|
||||
// Must truncate to float precision so that the
|
||||
// drill-down counts (which use NRQ.newFloatRange)
|
||||
// are correct:
|
||||
min = (float) min;
|
||||
max = (float) max;
|
||||
|
||||
boolean minIncl;
|
||||
boolean maxIncl;
|
||||
if (min == max) {
|
||||
minIncl = true;
|
||||
maxIncl = true;
|
||||
} else {
|
||||
minIncl = random().nextBoolean();
|
||||
maxIncl = random().nextBoolean();
|
||||
}
|
||||
rangeMinIncl[rangeID] = minIncl;
|
||||
rangeMaxIncl[rangeID] = maxIncl;
|
||||
ranges[rangeID] = new DoubleRange("r" + rangeID, min, minIncl, max, maxIncl);
|
||||
|
||||
if (VERBOSE) {
|
||||
System.out.println("TEST: range " + rangeID + ": " + ranges[rangeID]);
|
||||
}
|
||||
|
||||
// Do "slow but hopefully correct" computation of
|
||||
// expected count:
|
||||
for(int i=0;i<numDocs;i++) {
|
||||
boolean accept = true;
|
||||
if (minIncl) {
|
||||
accept &= values[i] >= min;
|
||||
} else {
|
||||
accept &= values[i] > min;
|
||||
}
|
||||
if (maxIncl) {
|
||||
accept &= values[i] <= max;
|
||||
} else {
|
||||
accept &= values[i] < max;
|
||||
}
|
||||
if (VERBOSE) {
|
||||
System.out.println("TEST: check doc=" + i + " val=" + values[i] + " accept=" + accept);
|
||||
}
|
||||
if (accept) {
|
||||
expectedCounts[rangeID]++;
|
||||
minAcceptedValue = Math.min(minAcceptedValue, values[i]);
|
||||
maxAcceptedValue = Math.max(maxAcceptedValue, values[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FacetsCollector sfc = new FacetsCollector();
|
||||
s.search(new MatchAllDocsQuery(), sfc);
|
||||
Query fastMatchQuery;
|
||||
if (random().nextBoolean()) {
|
||||
if (random().nextBoolean()) {
|
||||
fastMatchQuery = FloatPoint.newRangeQuery("field", minValue, maxValue);
|
||||
} else {
|
||||
fastMatchQuery = FloatPoint.newRangeQuery("field", minAcceptedValue, maxAcceptedValue);
|
||||
}
|
||||
} else {
|
||||
fastMatchQuery = null;
|
||||
}
|
||||
ValueSource vs = new FloatFieldSource("field");
|
||||
Facets facets = new DoubleRangeFacetCounts("field", vs, sfc, fastMatchQuery, ranges);
|
||||
FacetResult result = facets.getTopChildren(10, "field");
|
||||
assertEquals(numRange, result.labelValues.length);
|
||||
for(int rangeID=0;rangeID<numRange;rangeID++) {
|
||||
if (VERBOSE) {
|
||||
System.out.println("TEST: verify range " + rangeID + " expectedCount=" + expectedCounts[rangeID]);
|
||||
}
|
||||
LabelAndValue subNode = result.labelValues[rangeID];
|
||||
assertEquals("r" + rangeID, subNode.label);
|
||||
assertEquals(expectedCounts[rangeID], subNode.value.intValue());
|
||||
|
||||
DoubleRange range = ranges[rangeID];
|
||||
|
||||
// Test drill-down:
|
||||
DrillDownQuery ddq = new DrillDownQuery(config);
|
||||
if (random().nextBoolean()) {
|
||||
// We must do the nextUp/down in float space, here, because the nextUp that DoubleRange did in double space, when cast back to float,
|
||||
// in fact does nothing!
|
||||
float minFloat = (float) range.min;
|
||||
if (rangeMinIncl[rangeID] == false) {
|
||||
minFloat = Math.nextUp(minFloat);
|
||||
}
|
||||
float maxFloat = (float) range.max;
|
||||
if (rangeMaxIncl[rangeID] == false) {
|
||||
maxFloat = Math.nextAfter(maxFloat, Float.NEGATIVE_INFINITY);
|
||||
}
|
||||
ddq.add("field", FloatPoint.newRangeQuery("field", minFloat, maxFloat));
|
||||
} else {
|
||||
ddq.add("field", range.getQuery(fastMatchQuery, vs));
|
||||
}
|
||||
assertEquals(expectedCounts[rangeID], s.search(ddq, 10).totalHits);
|
||||
}
|
||||
}
|
||||
|
||||
w.close();
|
||||
IOUtils.close(r, dir);
|
||||
}
|
||||
|
||||
public void testRandomDoubles() throws Exception {
|
||||
Directory dir = newDirectory();
|
||||
RandomIndexWriter w = new RandomIndexWriter(random(), dir);
|
||||
|
Loading…
x
Reference in New Issue
Block a user