blob: fc5c814880c67632498a7419ec5437b76001448c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.solr.analytics.function.mapping;
import java.time.Instant;
import java.time.format.DateTimeParseException;
import java.util.Date;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.analytics.value.AnalyticsValueStream;
import org.apache.solr.analytics.value.DateValue;
import org.apache.solr.analytics.value.DoubleValue;
import org.apache.solr.analytics.value.FillableTestValue.TestDateValue;
import org.apache.solr.analytics.value.FillableTestValue.TestDateValueStream;
import org.apache.solr.analytics.value.FillableTestValue.TestDoubleValue;
import org.apache.solr.analytics.value.FillableTestValue.TestDoubleValueStream;
import org.apache.solr.analytics.value.FillableTestValue.TestFloatValue;
import org.apache.solr.analytics.value.FillableTestValue.TestFloatValueStream;
import org.apache.solr.analytics.value.FillableTestValue.TestIntValue;
import org.apache.solr.analytics.value.FillableTestValue.TestIntValueStream;
import org.apache.solr.analytics.value.FillableTestValue.TestLongValue;
import org.apache.solr.analytics.value.FillableTestValue.TestLongValueStream;
import org.apache.solr.analytics.value.FillableTestValue.TestStringValue;
import org.apache.solr.analytics.value.FillableTestValue.TestStringValueStream;
import org.apache.solr.analytics.value.FloatValue;
import org.apache.solr.analytics.value.IntValue;
import org.apache.solr.analytics.value.LongValue;
import org.apache.solr.analytics.value.StringValue;
import org.junit.Test;
public class BottomFunctionTest extends SolrTestCaseJ4 {
@Test
public void multiValueIntTest() {
TestIntValueStream val = new TestIntValueStream();
AnalyticsValueStream uncasted = BottomFunction.creatorFunction.apply(new AnalyticsValueStream[] {val});
assertTrue(uncasted instanceof IntValue);
IntValue func = (IntValue) uncasted;
// Neither exists
val.setValues();
func.getInt();
assertFalse(func.exists());
// One exists
val.setValues(30);
assertEquals(30, func.getInt());
assertTrue(func.exists());
// Both exist
val.setValues(30, 20, -10, 59);
assertEquals(-10, func.getInt());
assertTrue(func.exists());
}
@Test
public void multiValueLongTest() {
TestLongValueStream val = new TestLongValueStream();
AnalyticsValueStream uncasted = BottomFunction.creatorFunction.apply(new AnalyticsValueStream[] {val});
assertTrue(uncasted instanceof LongValue);
LongValue func = (LongValue) uncasted;
// Neither exists
val.setValues();
func.getLong();
assertFalse(func.exists());
// One exists
val.setValues(30L);
assertEquals(30L, func.getLong());
assertTrue(func.exists());
// Both exist
val.setValues(30L, 20L, -10L, 59L);
assertEquals(-10L, func.getLong());
assertTrue(func.exists());
}
@Test
public void multiValueFloatTest() {
TestFloatValueStream val = new TestFloatValueStream();
AnalyticsValueStream uncasted = BottomFunction.creatorFunction.apply(new AnalyticsValueStream[] {val});
assertTrue(uncasted instanceof FloatValue);
FloatValue func = (FloatValue) uncasted;
// Neither exists
val.setValues();
func.getFloat();
assertFalse(func.exists());
// One exists
val.setValues(30.0F);
assertEquals(30.0F, func.getFloat(), .000001);
assertTrue(func.exists());
// Both exist
val.setValues(30.5F, 20.01F, -10.49F, -10.48F);
assertEquals(-10.49F, func.getFloat(), .000001);
assertTrue(func.exists());
}
@Test
public void multiValueDoubleTest() {
TestDoubleValueStream val = new TestDoubleValueStream();
AnalyticsValueStream uncasted = BottomFunction.creatorFunction.apply(new AnalyticsValueStream[] {val});
assertTrue(uncasted instanceof DoubleValue);
DoubleValue func = (DoubleValue) uncasted;
// Neither exists
val.setValues();
func.getDouble();
assertFalse(func.exists());
// One exists
val.setValues(30.0);
assertEquals(30.0, func.getDouble(), .000001);
assertTrue(func.exists());
// Both exist
val.setValues(30.5, 20.01, -10.49, -10.48);
assertEquals(-10.49, func.getDouble(), .000001);
assertTrue(func.exists());
}
@Test
public void multiValueDateTest() throws DateTimeParseException {
TestDateValueStream val = new TestDateValueStream();
AnalyticsValueStream uncasted = BottomFunction.creatorFunction.apply(new AnalyticsValueStream[] {val});
assertTrue(uncasted instanceof DateValue);
DateValue func = (DateValue) uncasted;
// Neither exists
val.setValues();
func.getDate();
assertFalse(func.exists());
// One exists
val.setValues("1950-05-03T10:30:50Z");
assertEquals(Date.from(Instant.parse("1950-05-03T10:30:50Z")), func.getDate());
assertTrue(func.exists());
// Both exist
val.setValues("1950-05-03T10:30:50Z", "2200-01-01T10:00:50Z", "1800-12-31T11:30:50Z", "1930-05-020T10:45:50Z");
assertEquals(Date.from(Instant.parse("1800-12-31T11:30:50Z")), func.getDate());
assertTrue(func.exists());
}
@Test
public void multiValueStringTest() {
TestStringValueStream val = new TestStringValueStream();
AnalyticsValueStream uncasted = BottomFunction.creatorFunction.apply(new AnalyticsValueStream[] {val});
assertTrue(uncasted instanceof StringValue);
StringValue func = (StringValue) uncasted;
// Neither exists
val.setValues();
func.getString();
assertFalse(func.exists());
// One exists
val.setValues("abc");
assertEquals("abc", func.getString());
assertTrue(func.exists());
// Both exist
val.setValues("1abcdef", "abc", "def", "1abc");
assertEquals("1abc", func.getString());
assertTrue(func.exists());
}
@Test
public void multipleSingleValueIntTest() {
TestIntValue val1 = new TestIntValue();
TestIntValue val2 = new TestIntValue();
TestIntValue val3 = new TestIntValue();
TestIntValue val4 = new TestIntValue();
AnalyticsValueStream uncasted = BottomFunction.creatorFunction.apply(new AnalyticsValueStream[] {val1, val2, val3, val4});
assertTrue(uncasted instanceof IntValue);
IntValue func = (IntValue) uncasted;
// None exist
val1.setExists(false);
val2.setExists(false);
val3.setExists(false);
val4.setExists(false);
func.getInt();
assertFalse(func.exists());
// Some exist
val1.setValue(1000).setExists(false);
val2.setValue(30).setExists(true);
val3.setValue(-1000).setExists(false);
val4.setValue(12).setExists(true);
assertEquals(12, func.getInt());
assertTrue(func.exists());
// All exist values, one value
val1.setValue(45).setExists(true);
val2.setValue(30).setExists(true);
val3.setValue(-2).setExists(true);
val4.setValue(12).setExists(true);
assertEquals(-2, func.getInt());
assertTrue(func.exists());
}
@Test
public void multipleSingleValueLongTest() {
TestLongValue val1 = new TestLongValue();
TestLongValue val2 = new TestLongValue();
TestLongValue val3 = new TestLongValue();
TestLongValue val4 = new TestLongValue();
AnalyticsValueStream uncasted = BottomFunction.creatorFunction.apply(new AnalyticsValueStream[] {val1, val2, val3, val4});
assertTrue(uncasted instanceof LongValue);
LongValue func = (LongValue) uncasted;
// None exist
val1.setExists(false);
val2.setExists(false);
val3.setExists(false);
val4.setExists(false);
func.getLong();
assertFalse(func.exists());
// Some exist
val1.setValue(1000L).setExists(false);
val2.setValue(30L).setExists(true);
val3.setValue(-1000L).setExists(false);
val4.setValue(12L).setExists(true);
assertEquals(12L, func.getLong());
assertTrue(func.exists());
// All exist values, one value
val1.setValue(45L).setExists(true);
val2.setValue(30L).setExists(true);
val3.setValue(-2L).setExists(true);
val4.setValue(12L).setExists(true);
assertEquals(-2L, func.getLong());
assertTrue(func.exists());
}
@Test
public void multipleSingleValueFloatTest() {
TestFloatValue val1 = new TestFloatValue();
TestFloatValue val2 = new TestFloatValue();
TestFloatValue val3 = new TestFloatValue();
TestFloatValue val4 = new TestFloatValue();
AnalyticsValueStream uncasted = BottomFunction.creatorFunction.apply(new AnalyticsValueStream[] {val1, val2, val3, val4});
assertTrue(uncasted instanceof FloatValue);
FloatValue func = (FloatValue) uncasted;
// None exist
val1.setExists(false);
val2.setExists(false);
val3.setExists(false);
val4.setExists(false);
func.getFloat();
assertFalse(func.exists());
// Some exist
val1.setValue(1000.1233F).setExists(false);
val2.setValue(30.34F).setExists(true);
val3.setValue(-1000.3241F).setExists(false);
val4.setValue(12.123F).setExists(true);
assertEquals(12.123F, func.getFloat(), .000001);
assertTrue(func.exists());
// All exist values, one value
val1.setValue(45.43F).setExists(true);
val2.setValue(30.231F).setExists(true);
val3.setValue(-2.33F).setExists(true);
val4.setValue(12.5F).setExists(true);
assertEquals(-2.33F, func.getFloat(), .000001);
assertTrue(func.exists());
}
@Test
public void multipleSingleValueDoubleTest() {
TestDoubleValue val1 = new TestDoubleValue();
TestDoubleValue val2 = new TestDoubleValue();
TestDoubleValue val3 = new TestDoubleValue();
TestDoubleValue val4 = new TestDoubleValue();
AnalyticsValueStream uncasted = BottomFunction.creatorFunction.apply(new AnalyticsValueStream[] {val1, val2, val3, val4});
assertTrue(uncasted instanceof DoubleValue);
DoubleValue func = (DoubleValue) uncasted;
// None exist
val1.setExists(false);
val2.setExists(false);
val3.setExists(false);
val4.setExists(false);
func.getDouble();
assertFalse(func.exists());
// Some exist
val1.setValue(1000.1233).setExists(false);
val2.setValue(30.34).setExists(true);
val3.setValue(-1000.3241).setExists(false);
val4.setValue(12.123).setExists(true);
assertEquals(12.123, func.getDouble(), .000001);
assertTrue(func.exists());
// All exist values, one value
val1.setValue(45.43).setExists(true);
val2.setValue(30.231).setExists(true);
val3.setValue(-2.33).setExists(true);
val4.setValue(12.5).setExists(true);
assertEquals(-2.33, func.getDouble(), .000001);
assertTrue(func.exists());
}
@Test
public void multipleSingleValueDateTest() throws DateTimeParseException {
TestDateValue val1 = new TestDateValue();
TestDateValue val2 = new TestDateValue();
TestDateValue val3 = new TestDateValue();
TestDateValue val4 = new TestDateValue();
AnalyticsValueStream uncasted = BottomFunction.creatorFunction.apply(new AnalyticsValueStream[] {val1, val2, val3, val4});
assertTrue(uncasted instanceof DateValue);
DateValue func = (DateValue) uncasted;
// None exist
val1.setExists(false);
val2.setExists(false);
val3.setExists(false);
val4.setExists(false);
func.getDate();
assertFalse(func.exists());
// Some exist
val1.setValue("9999-05-03T10:30:50Z").setExists(false);
val2.setValue("1950-05-03T10:30:50Z").setExists(true);
val3.setValue("0000-05-03T10:30:50Z").setExists(false);
val4.setValue("1850-05-03T10:30:50Z").setExists(true);
assertEquals(Date.from(Instant.parse("1850-05-03T10:30:50Z")), func.getDate());
assertTrue(func.exists());
// All exist values, one value
val1.setValue("2200-05-03T10:30:50Z").setExists(true);
val2.setValue("1950-05-03T10:30:50Z").setExists(true);
val3.setValue("1700-05-03T10:30:50Z").setExists(true);
val4.setValue("1850-05-03T10:30:50Z").setExists(true);
assertEquals(Date.from(Instant.parse("1700-05-03T10:30:50Z")), func.getDate());
assertTrue(func.exists());
}
@Test
public void multipleStringValueDateTest() {
TestStringValue val1 = new TestStringValue();
TestStringValue val2 = new TestStringValue();
TestStringValue val3 = new TestStringValue();
TestStringValue val4 = new TestStringValue();
AnalyticsValueStream uncasted = BottomFunction.creatorFunction.apply(new AnalyticsValueStream[] {val1, val2, val3, val4});
assertTrue(uncasted instanceof StringValue);
StringValue func = (StringValue) uncasted;
// None exist
val1.setExists(false);
val2.setExists(false);
val3.setExists(false);
val4.setExists(false);
func.getString();
assertFalse(func.exists());
// Some exist
val1.setValue("abc").setExists(true);
val2.setValue("1111").setExists(false);
val3.setValue("asdfads").setExists(true);
val4.setValue("zzzzzzzz").setExists(false);
assertEquals("abc", func.getString());
assertTrue(func.exists());
// All exist values, one value
val1.setValue("abc").setExists(true);
val2.setValue("abc1234").setExists(true);
val3.setValue("asdfads").setExists(true);
val4.setValue("fdgsfg").setExists(true);
assertEquals("abc", func.getString());
assertTrue(func.exists());
}
}