blob: ba1f65b2310a1c697e96350494e0914ad180f45a [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.value;
import java.time.Instant;
import java.time.format.DateTimeParseException;
import java.util.Date;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.analytics.value.FillableTestValue.TestIntValue;
import org.apache.solr.analytics.value.constant.ConstantBooleanValue;
import org.apache.solr.analytics.value.constant.ConstantDateValue;
import org.apache.solr.analytics.value.constant.ConstantDoubleValue;
import org.apache.solr.analytics.value.constant.ConstantFloatValue;
import org.apache.solr.analytics.value.constant.ConstantIntValue;
import org.apache.solr.analytics.value.constant.ConstantLongValue;
import org.apache.solr.analytics.value.constant.ConstantStringValue;
import org.apache.solr.analytics.value.constant.ConstantValue;
import org.junit.Test;
public class ConstantValueTest extends SolrTestCaseJ4 {
@Test
public void constantParsingTest() throws DateTimeParseException {
// Int
AnalyticsValueStream uncasted = ConstantValue.creatorFunction.apply("1234");
assertTrue(uncasted instanceof ConstantIntValue);
assertEquals(1234, ((ConstantIntValue)uncasted).getInt());
// Long
uncasted = ConstantValue.creatorFunction.apply("1234123412341234");
assertTrue(uncasted instanceof ConstantLongValue);
assertEquals(1234123412341234L, ((ConstantLongValue)uncasted).getLong());
// Floats cannot currently be implicitly created
// Double
uncasted = ConstantValue.creatorFunction.apply("12341234.12341234");
assertTrue(uncasted instanceof ConstantDoubleValue);
assertEquals(12341234.12341234, ((ConstantDoubleValue)uncasted).getDouble(), 0);
// String
uncasted = ConstantValue.creatorFunction.apply("'abcdef'");
assertTrue(uncasted instanceof ConstantStringValue);
assertEquals("abcdef", ((ConstantStringValue)uncasted).getString());
uncasted = ConstantValue.creatorFunction.apply("\"abcdef\"");
assertTrue(uncasted instanceof ConstantStringValue);
assertEquals("abcdef", ((ConstantStringValue)uncasted).getString());
// Date
uncasted = ConstantValue.creatorFunction.apply("1800-01-01T10:30:15.33Z");
assertTrue(uncasted instanceof ConstantDateValue);
assertEquals(Date.from(Instant.parse("1800-01-01T10:30:15.33Z")), ((ConstantDateValue)uncasted).getDate());
}
@Test
public void constantConversionTest() {
AnalyticsValueStream val = new ConstantBooleanValue(true);
assertSame(val, val.convertToConstant());
val = new ConstantIntValue(123);
assertSame(val, val.convertToConstant());
val = new ConstantLongValue(123L);
assertSame(val, val.convertToConstant());
val = new ConstantFloatValue(123F);
assertSame(val, val.convertToConstant());
val = new ConstantDoubleValue(123.0);
assertSame(val, val.convertToConstant());
val = new ConstantDateValue(123L);
assertSame(val, val.convertToConstant());
val = new ConstantStringValue("123");
assertSame(val, val.convertToConstant());
}
@Test
public void constantBooleanTest() {
ConstantBooleanValue val = new ConstantBooleanValue(true);
assertTrue(val.exists());
assertEquals(true, val.getBoolean());
assertEquals("true", val.getString());
assertEquals(Boolean.TRUE, val.getObject());
TestIntValue counter = new TestIntValue();
counter.setValue(0);
val.streamBooleans( value -> {
assertEquals(true, value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamStrings( value -> {
assertEquals("true", value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamObjects( value -> {
assertEquals(Boolean.TRUE, value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
val = new ConstantBooleanValue(false);
assertTrue(val.exists());
assertEquals(false, val.getBoolean());
assertEquals("false", val.getString());
assertEquals(Boolean.FALSE, val.getObject());
counter.setValue(0);
val.streamBooleans( value -> {
assertEquals(false, value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamStrings( value -> {
assertEquals("false", value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamObjects( value -> {
assertEquals(Boolean.FALSE, value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
}
@Test
public void constantIntTest() {
ConstantIntValue val = new ConstantIntValue(24);
assertTrue(val.exists());
assertEquals(24, val.getInt());
assertEquals(24L, val.getLong());
assertEquals(24F, val.getFloat(), .00001);
assertEquals(24.0, val.getDouble(), .00001);
assertEquals("24", val.getString());
assertEquals(24, val.getObject());
TestIntValue counter = new TestIntValue();
counter.setValue(0);
val.streamInts( value -> {
assertEquals(24, value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamLongs( value -> {
assertEquals(24L, value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamFloats( value -> {
assertEquals(24F, value, .00001);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamDoubles( value -> {
assertEquals(24.0, value, .00001);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamStrings( value -> {
assertEquals("24", value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamObjects( value -> {
assertEquals(24, value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
}
@Test
public void constantLongTest() {
ConstantLongValue val = new ConstantLongValue(24L);
assertTrue(val.exists());
assertEquals(24L, val.getLong());
assertEquals(24.0, val.getDouble(), .00001);
assertEquals("24", val.getString());
assertEquals(24L, val.getObject());
TestIntValue counter = new TestIntValue();
counter.setValue(0);
val.streamLongs( value -> {
assertEquals(24L, value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamDoubles( value -> {
assertEquals(24.0, value, .00001);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamStrings( value -> {
assertEquals("24", value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamObjects( value -> {
assertEquals(24L, value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
}
@Test
public void constantFloatTest() {
ConstantFloatValue val = new ConstantFloatValue(24F);
assertTrue(val.exists());
assertEquals(24F, val.getFloat(), .00001);
assertEquals(24.0, val.getDouble(), .00001);
assertEquals("24.0", val.getString());
assertEquals(24F, val.getObject());
TestIntValue counter = new TestIntValue();
counter.setValue(0);
val.streamFloats( value -> {
assertEquals(24F, value, .00001);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamDoubles( value -> {
assertEquals(24.0, value, .00001);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamStrings( value -> {
assertEquals("24.0", value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamObjects( value -> {
assertEquals(24F, value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
}
@Test
public void constantDoubleTest() {
ConstantDoubleValue val = new ConstantDoubleValue(24.0);
assertTrue(val.exists());
assertEquals(24.0, val.getDouble(), .00001);
assertEquals("24.0", val.getString());
assertEquals(24.0, val.getObject());
TestIntValue counter = new TestIntValue();
counter.setValue(0);
val.streamDoubles( value -> {
assertEquals(24.0, value, .00001);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamStrings( value -> {
assertEquals("24.0", value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamObjects( value -> {
assertEquals(24.0, value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
}
@Test
public void constantDateTest() throws DateTimeParseException {
Date date = Date.from(Instant.parse("1800-01-01T10:30:15Z"));
ConstantDateValue val = new ConstantDateValue(date.getTime());
assertTrue(val.exists());
assertEquals(date.getTime(), val.getLong());
assertEquals(date, val.getDate());
assertEquals("1800-01-01T10:30:15Z", val.getString());
assertEquals(date, val.getObject());
TestIntValue counter = new TestIntValue();
counter.setValue(0);
val.streamLongs( value -> {
assertEquals(date.getTime(), value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamDates( value -> {
assertEquals(date, value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamStrings( value -> {
assertEquals("1800-01-01T10:30:15Z", value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamObjects( value -> {
assertEquals(date, value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
}
@Test
public void constantStringTest() {
ConstantStringValue val = new ConstantStringValue("abcdef");
assertTrue(val.exists());
assertEquals("abcdef", val.getString());
assertEquals("abcdef", val.getObject());
TestIntValue counter = new TestIntValue();
counter.setValue(0);
val.streamStrings( value -> {
assertEquals("abcdef", value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
counter.setValue(0);
val.streamObjects( value -> {
assertEquals("abcdef", value);
assertEquals(0, counter.getInt());
counter.setValue(1);
});
}
}