package io.crate.operation.operator; import io.crate.analyze.symbol.Literal; import io.crate.operation.scalar.AbstractScalarFunctionsTest; import org.junit.Test; import static io.crate.testing.SymbolMatchers.isFunction; import static io.crate.testing.SymbolMatchers.isLiteral; public class CmpOperatorTest extends AbstractScalarFunctionsTest { @Test public void testLte() { assertNormalize("id <= 8", isFunction("op_<=")); assertNormalize("8 <= 200", isLiteral(true)); assertNormalize("0.1 <= 0.1", isLiteral(true)); assertNormalize("16 <= 8", isLiteral(false)); assertNormalize("'abc' <= 'abd'", isLiteral(true)); assertEvaluate("true <= null", null); assertEvaluate("null <= 1", null); assertEvaluate("null <= 'abc'", null); assertEvaluate("null <= null", null); } @Test public void testLt() { assertNormalize("id < 8", isFunction("op_<")); assertNormalize("0.1 < 0.2", isLiteral(true)); assertNormalize("'abc' < 'abd'", isLiteral(true)); assertEvaluate("true < null", null); assertEvaluate("null < 1", null); assertEvaluate("null < name", null, Literal.of("foo")); assertEvaluate("null < null", null); } @Test public void testGte() { assertNormalize("id >= 8", isFunction("op_>=")); assertNormalize("0.1 >= 0.1", isLiteral(true)); assertNormalize("16 >= 8", isLiteral(true)); assertNormalize("'abc' >= 'abd'", isLiteral(false)); assertEvaluate("true >= null", null); assertEvaluate("null >= 1", null); assertEvaluate("null >= 'abc'", null); assertEvaluate("null >= null", null); } @Test public void testGt() { assertNormalize("id > 200", isFunction("op_>")); assertNormalize("0.1 > 0.1", isLiteral(false)); assertNormalize("16 > 8", isLiteral(true)); assertNormalize("'abd' > 'abc'", isLiteral(true)); assertEvaluate("true > null", null); assertEvaluate("null > 1", null); assertEvaluate("name > null", null, Literal.of("foo")); assertEvaluate("null > null", null); } @Test public void testBetween() { assertNormalize("0.1 between 0.01 and 0.2", isLiteral(true)); assertNormalize("10 between 1 and 2", isLiteral(false)); assertNormalize("'abd' between 'abc' and 'abe'", isLiteral(true)); assertEvaluate("1 between 0 and null", null); assertEvaluate("1 between null and 10", null); assertEvaluate("1 between null and null", null); assertEvaluate("null between 1 and 10", null); assertEvaluate("null between 1 and null", null); assertEvaluate("null between null and 10", null); assertEvaluate("null between null and null", null); } }