diff options
Diffstat (limited to 'predicate-search-core/src/test/java/com/yahoo/search/predicate/optimization/BooleanSimplifierTest.java')
-rw-r--r-- | predicate-search-core/src/test/java/com/yahoo/search/predicate/optimization/BooleanSimplifierTest.java | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/predicate-search-core/src/test/java/com/yahoo/search/predicate/optimization/BooleanSimplifierTest.java b/predicate-search-core/src/test/java/com/yahoo/search/predicate/optimization/BooleanSimplifierTest.java new file mode 100644 index 00000000000..37d2352df57 --- /dev/null +++ b/predicate-search-core/src/test/java/com/yahoo/search/predicate/optimization/BooleanSimplifierTest.java @@ -0,0 +1,60 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.search.predicate.optimization; + +import com.yahoo.document.predicate.Predicate; +import org.junit.Test; + +import static com.yahoo.document.predicate.Predicates.*; +import static org.junit.Assert.assertEquals; + +/** + * @author <a href="mailto:magnarn@yahoo-inc.com">Magnar Nedland</a> + */ +public class BooleanSimplifierTest { + + @Test + public void requireThatOrOfTrueIsTrue() { + assertSimplifiedTo(value(true), or(feature("a").inSet("b"), value(true))); + } + + @Test + public void requireThatFalseChildrenOfOrAreRemoved() { + assertSimplifiedTo(feature("a").inSet("b"), or(feature("a").inSet("b"), value(false))); + } + + @Test + public void requireThatAndOfFalseIsFalse() { + assertSimplifiedTo(value(false), and(feature("a").inSet("b"), value(false))); + } + + @Test + public void requireThatTrueChildrenOfAndAreRemoved() { + assertSimplifiedTo(feature("a").inSet("b"), and(feature("a").inSet("b"), value(true))); + } + + @Test + public void requireThatSingleChildAndOrAreRemoved() { + assertSimplifiedTo(feature("a").inSet("b"), and(or(and(feature("a").inSet("b"))))); + } + + @Test + public void requireThatValueChildrenOfNotAreInverted() { + assertSimplifiedTo(value(true), not(value(false))); + assertSimplifiedTo(value(false), not(value(true))); + assertSimplifiedTo(value(true), not(not(not(value(false))))); + assertSimplifiedTo(value(true), not(not(not(and(feature("a").inSet("b"), value(false)))))); + } + + @Test + public void requireThatComplexExpressionIsSimplified() { + assertSimplifiedTo( + Predicate.fromString("'pub_entity' not in [301951]"), + Predicate.fromString("true and true and true and true and true and 'pub_entity' not in [301951] and ((true and true and true and true) or (true and true and true and true) or (true and true and true and true and 'pub_entity' in [86271]))")); + } + + private void assertSimplifiedTo(Predicate expected, Predicate input) { + BooleanSimplifier simplifier = new BooleanSimplifier(); + Predicate actual = simplifier.process(input, new PredicateOptions(10)); + assertEquals(expected, actual); + } +} |