/** * 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.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; import com.rapidminer.tools.expression.internal.function.comparison.Equals; import com.rapidminer.tools.expression.internal.function.comparison.NotEquals; /** * JUnit Tests for the {@link Equals} and {@link NotEquals} functions of the Antlr ExpressionParser * * @author Sabrina Kirstein * */ public class AntlrParserEqualsTest 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(); } @Test public void equalsTrueNominal() { try { Expression expression = getExpressionWithFunctionContext("\"Moe\" == \"Moe\""); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsTrueBoolean() { try { Expression expression = getExpressionWithFunctionContext("TRUE == TRUE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsTrueDate() { 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] == [Date]", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsTrueNumeric() { try { Expression expression = getExpressionWithFunctionContext("1.45 == 1.45"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsFalseNominal() { try { Expression expression = getExpressionWithFunctionContext("\"Moe\" == \"Mr.Szyslak\""); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsFalseBoolean() { try { Expression expression = getExpressionWithFunctionContext("TRUE == FALSE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsFalseDate() { 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()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsFalseNumeric() { try { Expression expression = getExpressionWithFunctionContext("3.14 == 1"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsTrueNumericNominal() { try { Expression expression = getExpressionWithFunctionContext("3 == \"3\""); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsFalseNumericNominal() { try { Expression expression = getExpressionWithFunctionContext("3 == \"Claptrap\""); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsFalseNumericDate() { 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("3 == [Date]", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsTrueNumericDate() { try { ExampleSet exampleSet = makeDateExampleSet(); ExampleResolver resolver = new ExampleResolver(exampleSet); resolver.bind(exampleSet.getExample(0)); // use two attributes (date_time type and int type) to compare milliseconds Expression expression = getExpressionWithFunctionsAndExamples("[Date] == [Int]", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsNumericBooleanTrueTrue() { try { Expression expression = getExpressionWithFunctionContext("1 == TRUE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsNumericBooleanFalseTrue() { try { Expression expression = getExpressionWithFunctionContext("0 == FALSE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsNumericBooleanTrueFalse() { try { Expression expression = getExpressionWithFunctionContext("5 == TRUE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsNumericBooleanFalseFalse() { try { Expression expression = getExpressionWithFunctionContext("-1 == FALSE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsFalseBooleanNominal() { try { Expression expression = getExpressionWithFunctionContext("\"MoXXi\" == FALSE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsTrueBooleanNominal() { try { Expression expression = getExpressionWithFunctionContext("\"false\" == FALSE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsBooleanDate() { 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("FALSE == [Date]", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsNominalDate() { 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("\"NOMAD\" == [Date]", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsNumericMissing() { try { Expression expression = getExpressionWithFunctionContext("1 == MISSING_NUMERIC"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("1 == MISSING_NOMINAL"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("1 == MISSING_DATE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("1 == contains(MISSING_NOMINAL,\"test\")"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsNominalMissing() { try { Expression expression = getExpressionWithFunctionContext("\"Batman\" == MISSING_NUMERIC"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("\"Beastmaster\" == MISSING_NOMINAL"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("\"Phantomas\" == MISSING_DATE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("\"Phantomas\" == contains(MISSING_NOMINAL,\"test\")"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsBoolMissing() { try { Expression expression = getExpressionWithFunctionContext("TRUE == MISSING_NUMERIC"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("FALSE == MISSING_NOMINAL"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("TRUE == MISSING_DATE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("TRUE == contains(MISSING_NOMINAL,\"test\")"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsDateMissing() { 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] == MISSING_NUMERIC", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionsAndExamples("[Date] == MISSING_NOMINAL", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionsAndExamples("[Date] == MISSING_DATE", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionsAndExamples("[Date] == contains(MISSING_NOMINAL,\"test\")", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void equalsMissingMissing() { try { // same type missings Expression expression = getExpressionWithFunctionContext("MISSING_NUMERIC == MISSING_NUMERIC"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("MISSING_NOMINAL == MISSING_NOMINAL"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("MISSING_DATE == MISSING_DATE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("contains(MISSING_NOMINAL,\"test\") == contains(MISSING_NOMINAL,\"test\")"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); // different types missing expression = getExpressionWithFunctionContext("MISSING_NUMERIC == MISSING_NOMINAL"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("MISSING_NUMERIC == MISSING_DATE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("MISSING_NOMINAL == MISSING_DATE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("MISSING_NOMINAL == contains(MISSING_NOMINAL,\"test\")"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } // not equals @Test public void notEqualsFalseNominal() { try { Expression expression = getExpressionWithFunctionContext("\"Moe\" != \"Moe\""); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsFalseBoolean() { try { Expression expression = getExpressionWithFunctionContext("TRUE != TRUE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsFalseDate() { 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] != [Date]", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsFalseNumeric() { try { Expression expression = getExpressionWithFunctionContext("1.45 != 1.45"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsTrueNominal() { try { Expression expression = getExpressionWithFunctionContext("\"Moe\" != \"Mr.Szyslak\""); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsTrueBoolean() { try { Expression expression = getExpressionWithFunctionContext("TRUE != FALSE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsTrueDate() { 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()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsTrueNumeric() { try { Expression expression = getExpressionWithFunctionContext("3.14 != 1"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsFalseNumericNominal() { try { Expression expression = getExpressionWithFunctionContext("3 != \"3\""); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsTrueNumericNominal() { try { Expression expression = getExpressionWithFunctionContext("3 != \"Claptrap\""); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsTrueNumericDate() { 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("3 != [Date]", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsFalseNumericDate() { try { ExampleSet exampleSet = makeDateExampleSet(); ExampleResolver resolver = new ExampleResolver(exampleSet); resolver.bind(exampleSet.getExample(0)); // use two attributes (date_time type and int type) to compare milliseconds Expression expression = getExpressionWithFunctionsAndExamples("[Date] != [Int]", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsNumericBooleanFalseFalse() { try { Expression expression = getExpressionWithFunctionContext("1 != TRUE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsNumericBooleanTrueFalse() { try { Expression expression = getExpressionWithFunctionContext("0 != FALSE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsNumericBooleanFalseTrue() { try { Expression expression = getExpressionWithFunctionContext("5 != TRUE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsNumericBooleanTrueTrue() { try { Expression expression = getExpressionWithFunctionContext("-1 != FALSE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsTrueBooleanNominal() { try { Expression expression = getExpressionWithFunctionContext("\"MoXXi\" != FALSE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsFalseBooleanNominal() { try { Expression expression = getExpressionWithFunctionContext("\"false\" != FALSE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsBooleanDate() { 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] != FALSE", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsNominalDate() { 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] != \"NOMAD\"", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsNumericMissing() { try { Expression expression = getExpressionWithFunctionContext("1 != MISSING_NUMERIC"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("1 != MISSING_NOMINAL"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("1 != MISSING_DATE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsNominalMissing() { try { Expression expression = getExpressionWithFunctionContext("\"Batman\" != MISSING_NUMERIC"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("\"Beastmaster\" != MISSING_NOMINAL"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("\"Phantomas\" != MISSING_DATE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsBoolMissing() { try { Expression expression = getExpressionWithFunctionContext("TRUE != MISSING_NUMERIC"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("FALSE != MISSING_NOMINAL"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("TRUE != MISSING_DATE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("TRUE != contains(MISSING_NOMINAL,\"test\")"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsDateMissing() { 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] != MISSING_NUMERIC", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionsAndExamples("[Date] != MISSING_NOMINAL", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionsAndExamples("[Date] != MISSING_DATE", resolver); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } @Test public void notEqualsMissingMissing() { try { // same type missings Expression expression = getExpressionWithFunctionContext("MISSING_NUMERIC != MISSING_NUMERIC"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("MISSING_NOMINAL != MISSING_NOMINAL"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("MISSING_DATE != MISSING_DATE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("contains(MISSING_NOMINAL,\"test\") != contains(MISSING_NOMINAL,\"test\")"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertFalse(expression.evaluateBoolean()); // different types missing expression = getExpressionWithFunctionContext("MISSING_NUMERIC != MISSING_NOMINAL"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("MISSING_NUMERIC != MISSING_DATE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("MISSING_NOMINAL != MISSING_DATE"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); expression = getExpressionWithFunctionContext("MISSING_NOMINAL != contains(MISSING_NOMINAL,\"test\")"); assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType()); assertTrue(expression.evaluateBoolean()); } catch (ExpressionException e) { fail(e.getMessage()); } } }