diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-07-22 18:23:43 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2019-07-22 18:23:43 +0200 |
commit | 5101228f266e6cc327be9ef067c4954aa3205016 (patch) | |
tree | 7dab1faa5e86a9f5aeb0a6d0e464af961e361cfd /document/src/test | |
parent | 512c44b5d679c00cd5532b39f6ba368c241ebcd2 (diff) |
Add test for failing short circuit of and.
Diffstat (limited to 'document/src/test')
-rw-r--r-- | document/src/test/java/com/yahoo/document/select/LogicalNodeTestCase.java | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/document/src/test/java/com/yahoo/document/select/LogicalNodeTestCase.java b/document/src/test/java/com/yahoo/document/select/LogicalNodeTestCase.java new file mode 100644 index 00000000000..fbf307667d8 --- /dev/null +++ b/document/src/test/java/com/yahoo/document/select/LogicalNodeTestCase.java @@ -0,0 +1,67 @@ +package com.yahoo.document.select; + +import com.yahoo.document.BucketIdFactory; +import com.yahoo.document.select.rule.ExpressionNode; +import com.yahoo.document.select.rule.LiteralNode; +import com.yahoo.document.select.rule.LogicNode; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class LogicalNodeTestCase { + private static class TracedNode implements ExpressionNode { + + private final ExpressionNode node; + private boolean evaluated = false; + + TracedNode(ExpressionNode node) { + this.node = node; + } + @Override + public Object evaluate(Context doc) { + evaluated = true; + return node.evaluate(doc); + } + + @Override + public BucketSet getBucketSet(BucketIdFactory factory) { + return node.getBucketSet(factory); + } + + @Override + public OrderingSpecification getOrdering(int order) { + return node.getOrdering(order); + } + + @Override + public void accept(Visitor visitor) { + node.accept(visitor); + } + boolean isEvaluated() { return evaluated; } + } + private static Result evaluate(ExpressionNode node) { + return ((ResultList)node.evaluate(new Context(null))).toResult(); + } + @Test + public void testFullyExhaustedAnd() { + TracedNode second = new TracedNode(new LiteralNode(true)); + assertFalse(second.isEvaluated()); + ExpressionNode logical = new LogicNode() + .add(null, new LiteralNode(true)) + .add("and", second); + assertEquals(Result.TRUE, evaluate(logical)); + assertTrue(second.isEvaluated()); + } + @Test + public void testShortCircuitAnd() { + TracedNode second = new TracedNode(new LiteralNode(true)); + assertFalse(second.isEvaluated()); + ExpressionNode logical = new LogicNode() + .add(null, new LiteralNode(false)) + .add("and", second); + assertEquals(Result.FALSE, evaluate(logical)); + assertFalse(second.isEvaluated()); + } +} |