mirror of https://github.com/apache/lucene.git
LUCENE-5207: add test for huge amounts of variables
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/lucene5207@1523339 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
48bcf86367
commit
176334efcb
|
@ -110,4 +110,36 @@ public class TestDemoExpressions extends LuceneTestCase {
|
||||||
assertEquals(expected, actual, CheckHits.explainToleranceDelta(expected, actual));
|
assertEquals(expected, actual, CheckHits.explainToleranceDelta(expected, actual));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** tests huge amounts of variables in the expression */
|
||||||
|
public void testLotsOfBindings() throws Exception {
|
||||||
|
doTestLotsOfBindings(Byte.MAX_VALUE-1);
|
||||||
|
doTestLotsOfBindings(Byte.MAX_VALUE);
|
||||||
|
doTestLotsOfBindings(Byte.MAX_VALUE+1);
|
||||||
|
// TODO: ideally we'd test > Short.MAX_VALUE too, but compilation is currently recursive.
|
||||||
|
// so if we want to test such huge expressions, we need to instead change parser to use an explicit Stack
|
||||||
|
}
|
||||||
|
|
||||||
|
private void doTestLotsOfBindings(int n) throws Exception {
|
||||||
|
SimpleBindings bindings = new SimpleBindings();
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
if (i > 0) {
|
||||||
|
sb.append("+");
|
||||||
|
}
|
||||||
|
sb.append("x" + i);
|
||||||
|
bindings.add(new SortField("x" + i, SortField.Type.SCORE));
|
||||||
|
}
|
||||||
|
|
||||||
|
Expression expr = JavascriptCompiler.compile(sb.toString());
|
||||||
|
Sort sort = new Sort(expr.getSortField(bindings, true));
|
||||||
|
Query query = new TermQuery(new Term("body", "contents"));
|
||||||
|
TopFieldDocs td = searcher.search(query, null, 3, sort, true, true);
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
FieldDoc d = (FieldDoc) td.scoreDocs[i];
|
||||||
|
float expected = n*d.score;
|
||||||
|
float actual = ((Double)d.fields[0]).floatValue();
|
||||||
|
assertEquals(expected, actual, CheckHits.explainToleranceDelta(expected, actual));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue