/**
* 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.Calendar;
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.antlr.AntlrParser;
/**
* Tests the results of {@link AntlrParser#parse(String)} for date functions.
*
* @author David Arnu
*
*/
public class AntlrParserDateTest extends AntlrParserTest {
// double values for some date entries
static double sometime = 123142313411234.0;
static double sometime_before = sometime - 5000;
static double sometime_after = sometime + 5000;
private static ExampleSet makeDateExampleSet() {
List<Attribute> attributes = new LinkedList<>();
attributes.add(AttributeFactory.createAttribute("date_time", Ontology.DATE_TIME));
attributes.add(AttributeFactory.createAttribute("date_time_before", Ontology.DATE_TIME));
attributes.add(AttributeFactory.createAttribute("date_time_after", Ontology.DATE_TIME));
attributes.add(AttributeFactory.createAttribute("date_time_missing", Ontology.DATE_TIME));
attributes.add(AttributeFactory.createAttribute("integer", Ontology.INTEGER));
ExampleSetBuilder builder = ExampleSets.from(attributes);
double[] data = { sometime, sometime_before, sometime_after, Double.NaN, Double.NaN };
builder.addRow(data);
builder.addRow(data);
builder.addRow(data);
builder.addRow(data);
return builder.build();
}
// date_now
@Test
public void dateNowBasic() {
try {
Expression expression = getExpressionWithFunctionContext("date_now()");
assertEquals(ExpressionType.DATE, expression.getExpressionType());
// for testing we just assume that the dates are close enough, some delay might occur
assertTrue("Dates aren't close enough to each other!",
Math.abs(Calendar.getInstance().getTime().getTime() - expression.evaluateDate().getTime()) < 10);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateNowArgumentNumerical() {
try {
getExpressionWithFunctionContext("date_now(5)");
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateNowArgumentString() {
try {
getExpressionWithFunctionContext("date_now(\"bla\")");
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
// date_before
@Test
public void dateBeforeTRUE() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_before(date_time, date_time_after)",
resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateBeforeFALSE() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_before(date_time, date_time_before)",
resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateBeforeEqual() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_after(date_time, date_time)", resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateBeforeMissingFirst() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_before(date_time_missing, date_time)",
resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertEquals(null, expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateBeforeMissingSecond() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_before(date_time, date_time_missing)",
resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertEquals(null, expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateBeforeWrongFirst() {
try {
getExpressionWithFunctionContext("date_before(\"bla\", date_now())");
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateBeforeWrongSecond() {
try {
getExpressionWithFunctionContext("date_before(date_now(), \"bla\")");
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
// date_after
@Test
public void dateAfterTRUE() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_after(date_time, date_time_before)",
resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertTrue(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateAfterFALSE() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_after(date_time, date_time_after)", resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateAfterEqual() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_after(date_time, date_time)", resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertFalse(expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateAfterMissingFirst() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_after(date_time_missing, date_time)",
resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertEquals(null, expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateAfterMissingSecond() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_after(date_time, date_time_missing)",
resolver);
assertEquals(ExpressionType.BOOLEAN, expression.getExpressionType());
assertEquals(null, expression.evaluateBoolean());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateAfterWrongFirst() {
try {
getExpressionWithFunctionContext("date_after(\"bla\", date_now())");
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateAfterWrongSecond() {
try {
getExpressionWithFunctionContext("date_after(date_now(), \"bla\")");
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
// date_diff
@Test
public void dateDiffBasic() {
try {
Expression expression = getExpressionWithFunctionContext("date_diff(date_now(), date_now())");
assertEquals(ExpressionType.INTEGER, expression.getExpressionType());
// for testing we just assume that the dates are close enough, some delay might occur
assertTrue("Dates aren't close enough to each other!", Math.abs(expression.evaluateNumerical()) < 10);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateDiffPositive() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_diff(date_time, date_time_after)", resolver);
assertEquals(sometime_after - sometime, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateDiffNegative() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_diff(date_time, date_time_before)", resolver);
assertEquals(sometime_before - sometime, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateDiffEqual() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_diff(date_time, date_time)", resolver);
assertEquals(0, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateDiffMissingFirst() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_diff(date_time_missing, date_time)",
resolver);
assertEquals(Double.NaN, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateDiffMissingSecond() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_diff(date_time, date_time_missing)",
resolver);
assertEquals(Double.NaN, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateDiffWrongFirst() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
getExpressionWithFunctionContext("date_diff(\"bla\", date_now())");
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateDiffWrongSecond() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
getExpressionWithFunctionContext("date_diff(date_now(), \"bla\")");
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateDiffWithLocaleTZ() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples(
"date_diff(date_time, date_time_after, \"us\", \"America/Los Angeles\")", resolver);
assertEquals(sometime_after - sometime, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateDiffLocaleTZWrongFormat() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples(
"date_diff(date_time, date_time_after, \"abcd\", \"abcd\")", resolver);
assertEquals(sometime_after - sometime, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateDiffLocaleTZWrongType() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
getExpressionWithFunctionsAndExamples("date_diff(date_time, date_time_after, 5, 5)", resolver);
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateDiffLocaleTZMissing() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples(
"date_diff(date_time, date_time_after, MISSING_NOMINAL, MISSING_NOMINAL)", resolver);
assertEquals(sometime_after - sometime, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
// date_add
@Test
public void dateAddBasic() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_add(date_now(), 5, DATE_UNIT_HOUR)",
resolver);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR, 5);
double diff = cal.getTime().getTime() - expression.evaluateDate().getTime();
assertTrue("Dates aren't close enough to each other!", Math.abs(diff) < 10);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
public void dateAddBasicWithLocaleTZ() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples(
"date_add(date_now(), 5, DATE_UNIT_HOUR, \"us\", \"America/Los Angeles\")", resolver);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR, 5);
double diff = cal.getTime().getTime() - expression.evaluateDate().getTime();
assertTrue("Dates aren't close enough to each other!", Math.abs(diff) < 10);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
public void dateAddBasicWithLocaleTZMissing() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples(
"date_add(date_now(), 5, DATE_UNIT_HOUR, MISSNING_NOMINAL, MISSNING_NOMINAL)", resolver);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR, 5);
double diff = cal.getTime().getTime() - expression.evaluateDate().getTime();
assertTrue("Dates aren't close enough to each other!", Math.abs(diff) < 10);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateAddMissingFirst() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_add(date_time_missing, 5, DATE_UNIT_HOUR)",
resolver);
assertEquals(null, expression.evaluateDate());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateAddMissingSecond() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_add(date_time, [integer], DATE_UNIT_HOUR)",
resolver);
assertEquals(null, expression.evaluateDate());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateAddMissingThird() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_add(date_time, 5, MISSING_NOMINAL)",
resolver);
assertEquals(null, expression.evaluateDate());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateAddWrongFirst() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
getExpressionWithFunctionsAndExamples("date_add(5, 5, DATE_UNIT_HOUR)", resolver);
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateAddWrongSecond() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
getExpressionWithFunctionsAndExamples("date_add(date_time, \"abc\", DATE_UNIT_HOUR)", resolver);
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateAddWrongThirdType() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
getExpressionWithFunctionsAndExamples("date_add(date_time, 5, 5)", resolver);
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateAddWrongThirdConstant() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_add(date_time, 5, \"abc\")", resolver);
// fails during runtime
expression.evaluateDate();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateAddWrongLocaleTZ() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
getExpressionWithFunctionsAndExamples("date_add(date_time, 5, DATE_UNIT_HOUR , 5,,5)", resolver);
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
// date_set
@Test
public void dateSetBasic() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_set(date_time, 11, DATE_UNIT_MONTH)",
resolver);
assertEquals(11, expression.evaluateDate().getMonth());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateSetBasicWithLocaleTZ() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples(
"date_set(date_time, 10, DATE_UNIT_MINUTE, \"us\", \"America/Los Angeles\")", resolver);
assertEquals(10, expression.evaluateDate().getMinutes());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateSetBasicWithLocaleTZMissing() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples(
"date_set(date_now(), 5, DATE_UNIT_HOUR, MISSING_NOMINAL, MISSING_NOMINAL)", resolver);
assertEquals(5, expression.evaluateDate().getHours());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateSetMissingFirst() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_set(date_time_missing, 5, DATE_UNIT_HOUR)",
resolver);
assertEquals(null, expression.evaluateDate());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateSetMissingSecond() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_set(date_time, [integer], DATE_UNIT_HOUR)",
resolver);
assertEquals(null, expression.evaluateDate());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateSetMissingThird() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_set(date_time, 5, MISSING_NOMINAL)",
resolver);
assertEquals(null, expression.evaluateDate());
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateSetWrongFirst() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
getExpressionWithFunctionsAndExamples("date_set(5, 5, DATE_UNIT_HOUR)", resolver);
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateSetWrongSecond() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
getExpressionWithFunctionsAndExamples("date_set(date_time, \"abc\", DATE_UNIT_HOUR)", resolver);
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateSetWrongThirdType() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
getExpressionWithFunctionsAndExamples("date_set(date_time, 5, 5)", resolver);
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateSetWrongThirdConstant() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_set(date_time, 5, \"abc\")", resolver);
// fails during runtime
expression.evaluateDate();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateSetWrongLocaleTZ() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
getExpressionWithFunctionsAndExamples("date_set(date_time, 5, DATE_UNIT_HOUR , 5, 5)", resolver);
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
// date_get
@Test
public void dateGetBasic() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_get(date_time, DATE_UNIT_HOUR)", resolver);
assertEquals(7, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateGetMissingFirst() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_get(date_time_missing, DATE_UNIT_HOUR)",
resolver);
assertEquals(Double.NaN, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateGetMissingSecond() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_get(date_time, MISSING_NOMINAL)", resolver);
assertEquals(Double.NaN, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateGetBasicWithLocaleTZ() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_get(date_time, DATE_UNIT_HOUR)", resolver);
assertEquals(7, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateGetWrongFirst() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
getExpressionWithFunctionsAndExamples("date_get(5, DATE_UNIT_HOUR, \"us\", \"America/Los Angeles\")", resolver);
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateGetWrongSecond() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
getExpressionWithFunctionsAndExamples("date_get(date_time, 5.5 )", resolver);
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateGetWrongUnit() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_get(date_time, \"X\")", resolver);
expression.evaluate();
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateGetMissingLocaleTZ() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples(
"date_get(date_time, DATE_UNIT_HOUR, MISSING_NOMINAL, MISSING_NOMINAL)", resolver);
assertEquals(7, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateGetWrongLocaleTZ() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
getExpressionWithFunctionsAndExamples("date_get(date_time, DATE_UNIT_HOUR, 5, 5)", resolver);
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
// date_time
@Test
public void dateMillis() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_millis(date_time)", resolver);
assertEquals(ExpressionType.INTEGER, expression.getExpressionType());
assertEquals(sometime, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
@Test
public void dateMillisWrongType() {
try {
getExpressionWithFunctionContext("date_millis(5)");
fail();
} catch (ExpressionException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void dateMillisMissing() {
try {
ExampleSet exampleSet = makeDateExampleSet();
ExampleResolver resolver = new ExampleResolver(exampleSet);
resolver.bind(exampleSet.getExample(0));
Expression expression = getExpressionWithFunctionsAndExamples("date_millis(date_time_missing)", resolver);
assertEquals(ExpressionType.INTEGER, expression.getExpressionType());
assertEquals(Double.NaN, expression.evaluateNumerical(), 1e-15);
} catch (ExpressionException e) {
fail(e.getMessage());
}
}
}