From 2f73532d52ddc67838d2fa9ac71bd2266960b730 Mon Sep 17 00:00:00 2001 From: Robert Muir Date: Sat, 14 Sep 2013 23:33:53 +0000 Subject: [PATCH] LUCENE-5207: more tests git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/lucene5207@1523357 13f79535-47bb-0310-9956-ffa450edef68 --- .../expressions/TestDemoExpressions.java | 38 +++++++++++++++++++ .../js/TestJavascriptOperations.java | 9 +++++ 2 files changed, 47 insertions(+) diff --git a/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java b/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java index 190b38e6484..9567154cdbb 100644 --- a/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java +++ b/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java @@ -111,6 +111,44 @@ public class TestDemoExpressions extends LuceneTestCase { } } + /** tests same binding used more than once in an expression */ + public void testTwoOfSameBinding() throws Exception { + Expression expr = JavascriptCompiler.compile("_score + _score"); + + SimpleBindings bindings = new SimpleBindings(); + bindings.add(new SortField("_score", SortField.Type.SCORE)); + + 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 = 2*d.score; + float actual = ((Double)d.fields[0]).floatValue(); + assertEquals(expected, actual, CheckHits.explainToleranceDelta(expected, actual)); + } + } + + /** tests expression referring to another expression */ + public void testExpressionRefersToExpression() throws Exception { + Expression expr1 = JavascriptCompiler.compile("_score"); + Expression expr2 = JavascriptCompiler.compile("2*expr1"); + + SimpleBindings bindings = new SimpleBindings(); + bindings.add(new SortField("_score", SortField.Type.SCORE)); + bindings.add("expr1", expr1); + + Sort sort = new Sort(expr2.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 = 2*d.score; + float actual = ((Double)d.fields[0]).floatValue(); + 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); diff --git a/lucene/expressions/src/test/org/apache/lucene/expressions/js/TestJavascriptOperations.java b/lucene/expressions/src/test/org/apache/lucene/expressions/js/TestJavascriptOperations.java index 6ade936401e..f0cd482d308 100644 --- a/lucene/expressions/src/test/org/apache/lucene/expressions/js/TestJavascriptOperations.java +++ b/lucene/expressions/src/test/org/apache/lucene/expressions/js/TestJavascriptOperations.java @@ -304,6 +304,10 @@ public class TestJavascriptOperations extends LuceneTestCase { assertEvaluatesTo("0x1", 1); assertEvaluatesTo("0xF", 15); assertEvaluatesTo("0x1234ABCDEF", 78193085935L); + assertEvaluatesTo("1 << 0x1", 1 << 0x1); + assertEvaluatesTo("1 << 0xA", 1 << 0xA); + assertEvaluatesTo("0x1 << 2", 0x1 << 2); + assertEvaluatesTo("0xA << 2", 0xA << 2); } public void testHexConst2() throws Exception { @@ -318,5 +322,10 @@ public class TestJavascriptOperations extends LuceneTestCase { assertEvaluatesTo("01", 1); assertEvaluatesTo("010", 8); assertEvaluatesTo("0123456777", 21913087); + assertEvaluatesTo("1 << 01", 1 << 01); + assertEvaluatesTo("1 << 010", 1 << 010); + assertEvaluatesTo("01 << 2", 01 << 2); + assertEvaluatesTo("010 << 2", 010 << 2); + } }