/**
* Copyright (C) 2001-2017 by RapidMiner and the contributors
*
* Complete list of developers available at our web site:
*
* http://rapidminer.com
*
* This program is free software: you can redistribute it and/or modify it under the terms of the
* GNU Affero General Public License as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License along with this program.
* If not, see http://www.gnu.org/licenses/.
*/
package com.rapidminer.tools.expression.internal.function;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.LinkedList;
import java.util.List;
import org.junit.Test;
import com.rapidminer.example.Attribute;
import com.rapidminer.example.ExampleSet;
import com.rapidminer.example.table.AttributeFactory;
import com.rapidminer.example.utils.ExampleSetBuilder;
import com.rapidminer.example.utils.ExampleSets;
import com.rapidminer.tools.Ontology;
import com.rapidminer.tools.expression.ExampleResolver;
import com.rapidminer.tools.expression.Expression;
import com.rapidminer.tools.expression.ExpressionException;
import com.rapidminer.tools.expression.ExpressionType;
/**
* JUnit Tests for the comparison functions of the Antlr ExpressionParser
*
* @author Thilo Kamradt
*
*/
public class AntlrParserComparisonTest extends AntlrParserTest {
// long value for some date entry
static long sometime = 1436792411000l;
// long value for some other date entry
static long someothertime = 1436792413450l;
private static ExampleSet makeDateExampleSet() {
List<Attribute> attributes = new LinkedList<>();
attributes.add(AttributeFactory.createAttribute("Date", Ontology.DATE_TIME));
attributes.add(AttributeFactory.createAttribute("Int", Ontology.INTEGER));
attributes.add(AttributeFactory.createAttribute("otherDate", Ontology.DATE_TIME));
ExampleSetBuilder builder = ExampleSets.from(attributes);
double[] data = { sometime, sometime, someothertime };
builder.addRow(data);
builder.addRow(data);
builder.addRow(data);
builder.addRow(data);
return builder.build();
}
// missing
@Test
public void missingTrueNominal() {
try {
Expression expression = getExpressionWithFunctionContext("missing(MISSING_NOMINAL)");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void missingTrueNumeric() {
try {
Expression expression = getExpressionWithFunctionContext("missing(MISSING_NUMERIC)");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void missingTrueDate() {
try {
Expression expression = getExpressionWithFunctionContext("missing(MISSING_DATE)");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void missingTrueBinominal() {
try {
Expression expression = getExpressionWithFunctionContext("missing(contains(MISSING_NOMINAL,\"test\"))");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void missingNoArg() {
try {
Expression expression = getExpressionWithFunctionContext("missing()");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void missingTooManyArgs() {
try {
Expression expression = getExpressionWithFunctionContext("missing(1,2,3,4)");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void missingFalseNumber() {
try {
Expression expression = getExpressionWithFunctionContext("missing(1)");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void missingFalseNominal() {
try {
Expression expression = getExpressionWithFunctionContext("missing(\"HandsomeJack\")");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void missingFalseNumeric() {
try {
Expression expression = getExpressionWithFunctionContext("missing(pi)");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void missingFalseBoolean() {
try {
Expression expression = getExpressionWithFunctionContext("missing(TRUE)");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void missingFalseDate() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
// use two attributes (date_time type) to compare dates
Expression expression = getExpressionWithFunctionsAndExamples("missing([Date])", resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
// <
@Test
public void smallerTrueNumeric() {
try {
Expression expression = getExpressionWithFunctionContext("1 < 1.2");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void smallerFalseNumeric() {
try {
Expression expression = getExpressionWithFunctionContext("1.2 < 1.2");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void smallerTrueNominal() {
try {
Expression expression = getExpressionWithFunctionContext("\"bo\" < \"ca\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void smallerFalseNominal() {
try {
Expression expression = getExpressionWithFunctionContext("\"boom\" < \"baboom\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void smallerNominalMissingFalse() {
try {
Expression expression = getExpressionWithFunctionContext("\"boom\" < MISSING_NOMINAL");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void smallerNominalMissingError() {
try {
Expression expression = getExpressionWithFunctionContext(" MISSING_NOMINAL < 8");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void smallerNumericMissingFalse() {
try {
Expression expression = getExpressionWithFunctionContext("5 < MISSING_NUMERIC");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void smallerNumericMissingError() {
try {
Expression expression = getExpressionWithFunctionContext(" MISSING_NUMERIC < \"boom\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void smallerDateMissing() {
try {
Expression expression = getExpressionWithFunctionContext("\"boom\" < MISSING_DATE");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void smallerDifferentTypes() {
try {
Expression expression = getExpressionWithFunctionContext("8 < \"baboom\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void smallerBool() {
try {
Expression expression = getExpressionWithFunctionContext("FALSE < TRUE");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void smallerNumericBool() {
try {
Expression expression = getExpressionWithFunctionContext("0 < TRUE");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void smallerDate() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
// use two attributes (date_time type) to compare dates
Expression expression = getExpressionWithFunctionsAndExamples("[Date] < [otherDate]", resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
// <=
@Test
public void smallerEqualTrueNumeric() {
try {
Expression expression = getExpressionWithFunctionContext("1.2 <= 1.2");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void smallerEqualFalseNumeric() {
try {
Expression expression = getExpressionWithFunctionContext("2 <= 1.2");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void smallerEqualTrueNominal() {
try {
Expression expression = getExpressionWithFunctionContext("\"bo\" <= \"bo\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void smallerEqualFalseNominal() {
try {
Expression expression = getExpressionWithFunctionContext("\"boom\" <= \"baboom\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void smallerEqualNominalMissingFalse() {
try {
Expression expression = getExpressionWithFunctionContext("\"boom\" <= MISSING_NOMINAL");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void smallerEqualNominalMissingError() {
try {
Expression expression = getExpressionWithFunctionContext(" MISSING_NOMINAL <= 8");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void smallerEqualNumericMissingFalse() {
try {
Expression expression = getExpressionWithFunctionContext("5 <= MISSING_NUMERIC");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void smallerEqualNumericMissingError() {
try {
Expression expression = getExpressionWithFunctionContext(" MISSING_NUMERIC <= \"boom\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void smallerEqualDateMissing() {
try {
Expression expression = getExpressionWithFunctionContext("\"boom\" <= MISSING_DATE");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void smallerEqualDifferentTypes() {
try {
Expression expression = getExpressionWithFunctionContext("8 <= \"baboom\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void smallerEqualBool() {
try {
Expression expression = getExpressionWithFunctionContext("FALSE <= TRUE");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void smallerEqualNumericBool() {
try {
Expression expression = getExpressionWithFunctionContext("0 <= TRUE");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void smallerEqualDate() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
// use two attributes (date_time type) to compare dates
Expression expression = getExpressionWithFunctionsAndExamples("[Date] <= [otherDate]", resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
// >
@Test
public void greaterTrueNumeric() {
try {
Expression expression = getExpressionWithFunctionContext("1.2 > 1");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void greaterFalseNumeric() {
try {
Expression expression = getExpressionWithFunctionContext("1.2 > 1.2");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void greaterTrueNominal() {
try {
Expression expression = getExpressionWithFunctionContext("\"ca\" > \"bc\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void greaterFalseNominal() {
try {
Expression expression = getExpressionWithFunctionContext("\"baboom\" > \"boom\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void greaterNominalMissingFalse() {
try {
Expression expression = getExpressionWithFunctionContext("\"boom\" > MISSING_NOMINAL");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void greaterNominalMissingError() {
try {
Expression expression = getExpressionWithFunctionContext(" MISSING_NOMINAL > 8");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void greaterNumericMissingFalse() {
try {
Expression expression = getExpressionWithFunctionContext("5 > MISSING_NUMERIC");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void greaterNumericMissingError() {
try {
Expression expression = getExpressionWithFunctionContext(" MISSING_NUMERIC > \"boom\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void greaterDateMissing() {
try {
Expression expression = getExpressionWithFunctionContext("\"boom\" > MISSING_DATE");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void greaterDifferentTypes() {
try {
Expression expression = getExpressionWithFunctionContext("8 > \"baboom\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void greaterBool() {
try {
Expression expression = getExpressionWithFunctionContext("FALSE > TRUE");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void greaterNumericBool() {
try {
Expression expression = getExpressionWithFunctionContext("0 > TRUE");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void greaterDate() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
// use two attributes (date_time type) to compare dates
Expression expression = getExpressionWithFunctionsAndExamples("[Date] > [otherDate]", resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
// >=
@Test
public void greaterEqualTrueNumeric() {
try {
Expression expression = getExpressionWithFunctionContext("1.2 >= 1.2");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void greaterEqualFalseNumeric() {
try {
Expression expression = getExpressionWithFunctionContext("1.2 >= 2");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void greaterEqualTrueNominal() {
try {
Expression expression = getExpressionWithFunctionContext("\"ca\" >= \"bc\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void greaterEqualFalseNominal() {
try {
Expression expression = getExpressionWithFunctionContext("\"baboom\" >= \"boom\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void greaterEqualNominalMissingFalse() {
try {
Expression expression = getExpressionWithFunctionContext("\"boom\" >= MISSING_NOMINAL");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void greaterEqualNominalMissingError() {
try {
Expression expression = getExpressionWithFunctionContext(" MISSING_NOMINAL >= 8");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void greaterEqualNumericMissingFalse() {
try {
Expression expression = getExpressionWithFunctionContext("5 >= MISSING_NUMERIC");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void greaterEqualNumericMissingError() {
try {
Expression expression = getExpressionWithFunctionContext(" MISSING_NUMERIC >= \"boom\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void greaterEqualDateMissing() {
try {
Expression expression = getExpressionWithFunctionContext("\"boom\" >= MISSING_DATE");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void greaterEqualDifferentTypes() {
try {
Expression expression = getExpressionWithFunctionContext("8 >= \"baboom\"");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void greaterEqualBool() {
try {
Expression expression = getExpressionWithFunctionContext("FALSE >= TRUE");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void greaterEqualNumericBool() {
try {
Expression expression = getExpressionWithFunctionContext("0 >= TRUE");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void greaterEqualDate() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
// use two attributes (date_time type) to compare dates
Expression expression = getExpressionWithFunctionsAndExamples("[Date] >= [otherDate]", resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
// isFinite() tests
@Test
public void isFiniteTrueInt() {
try {
Expression expression = getExpressionWithFunctionContext("isFinite(234)");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void isFiniteTrueDouble() {
try {
Expression expression = getExpressionWithFunctionContext("isFinite(234.567)");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void isFiniteFalseInf() {
try {
Expression expression = getExpressionWithFunctionContext("isFinite(INFINITY)");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void isFiniteFalseNegInf() {
try {
Expression expression = getExpressionWithFunctionContext("isFinite(-INFINITY)");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void isFiniteMissing() {
try {
Expression expression = getExpressionWithFunctionContext("isFinite(MISSING_NUMERIC)");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertEquals(null, expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void isFiniteErrorNoArgument() {
try {
Expression expression = getExpressionWithFunctionContext("isFinite()");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void isFiniteErrorTooManyArguments() {
try {
Expression expression = getExpressionWithFunctionContext("isFinite(23,\"blob\")");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void isFiniteErrorWrongTypeDate() {
try {
Expression expression = getExpressionWithFunctionContext("isFinite(date_now())");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void isFiniteErrorWrongTypeNominal() {
try {
Expression expression = getExpressionWithFunctionContext("isFinite(\"Menschenmaterial\")");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void isFiniteErrorWrongTypeBool() {
try {
Expression expression = getExpressionWithFunctionContext("isFinite(TRUE)");
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
expression.evaluateBoolean();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
}