package mil.nga.giat.geowave.core.geotime.index.dimension;
import java.util.Calendar;
import java.util.TimeZone;
import mil.nga.giat.geowave.core.geotime.index.dimension.TemporalBinningStrategy.Unit;
import mil.nga.giat.geowave.core.index.dimension.bin.BinningStrategy;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class TimeDefinitionTest
{
private double DELTA = 1e-15;
@Before
public void setTimezoneToGMT() {
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
}
@Test
public void testTimeDefinitionMaxBinByDay() {
final double expectedMin = 0.0;
final double expectedMax = 86399999;
final Calendar calendar = Calendar.getInstance();
calendar.set(
Calendar.HOUR_OF_DAY,
23);
calendar.set(
Calendar.MINUTE,
59);
calendar.set(
Calendar.SECOND,
59);
calendar.set(
Calendar.MILLISECOND,
999);
BinningStrategy bin = getStrategyByUnit(Unit.DAY);
Assert.assertEquals(
expectedMin,
bin.getBinMin(),
DELTA);
Assert.assertEquals(
expectedMax,
bin.getBinMax(),
DELTA);
Assert.assertEquals(
bin.getBinMax(),
bin.getBinnedValue(
calendar.getTimeInMillis()).getNormalizedValue(),
DELTA);
}
@Test
public void testTimeDefinitionMaxBinByMonth() {
final double expectedMin = 0.0;
final double expectedMax = 2678399999.0;
final Calendar calendar = Calendar.getInstance();
calendar.set(
Calendar.MONTH,
6);
calendar.set(
Calendar.DATE,
31);
calendar.set(
Calendar.HOUR_OF_DAY,
23);
calendar.set(
Calendar.MINUTE,
59);
calendar.set(
Calendar.SECOND,
59);
calendar.set(
Calendar.MILLISECOND,
999);
BinningStrategy bin = getStrategyByUnit(Unit.MONTH);
Assert.assertEquals(
expectedMin,
bin.getBinMin(),
DELTA);
Assert.assertEquals(
expectedMax,
bin.getBinMax(),
DELTA);
Assert.assertEquals(
bin.getBinMax(),
bin.getBinnedValue(
calendar.getTimeInMillis()).getNormalizedValue(),
DELTA);
}
@Test
public void testTimeDefinitionMinBinByMonth() {
final double expectedMin = 0.0;
final double expectedMax = 2678399999.0;
final Calendar calendar = Calendar.getInstance();
calendar.set(
Calendar.MONTH,
6);
calendar.set(
Calendar.DATE,
1);
calendar.set(
Calendar.HOUR_OF_DAY,
0);
calendar.set(
Calendar.MINUTE,
0);
calendar.set(
Calendar.SECOND,
0);
calendar.set(
Calendar.MILLISECOND,
0);
BinningStrategy bin = getStrategyByUnit(Unit.MONTH);
Assert.assertEquals(
expectedMin,
bin.getBinMin(),
DELTA);
Assert.assertEquals(
expectedMax,
bin.getBinMax(),
DELTA);
Assert.assertEquals(
bin.getBinMin(),
bin.getBinnedValue(
calendar.getTimeInMillis()).getNormalizedValue(),
DELTA);
}
@Test
public void testTimeDefinitionMaxBinByYEAR() {
final double expectedMin = 0.0;
final double expectedMax = 31622399999.0;
final Calendar calendar = Calendar.getInstance();
calendar.set(
Calendar.YEAR,
2012);
calendar.set(
Calendar.MONTH,
11);
calendar.set(
Calendar.DATE,
31);
calendar.set(
Calendar.HOUR_OF_DAY,
23);
calendar.set(
Calendar.MINUTE,
59);
calendar.set(
Calendar.SECOND,
59);
calendar.set(
Calendar.MILLISECOND,
999);
BinningStrategy bin = getStrategyByUnit(Unit.YEAR);
Assert.assertEquals(
expectedMin,
bin.getBinMin(),
DELTA);
Assert.assertEquals(
expectedMax,
bin.getBinMax(),
DELTA);
Assert.assertEquals(
bin.getBinMax(),
bin.getBinnedValue(
calendar.getTimeInMillis()).getNormalizedValue(),
DELTA);
}
@Test
public void testTimeDefinitionBinByHour() {
final double expectedMin = 0.0;
final double expectedMax = 3599999.0;
final Calendar calendar = Calendar.getInstance();
calendar.set(
Calendar.MINUTE,
59);
calendar.set(
Calendar.SECOND,
59);
calendar.set(
Calendar.MILLISECOND,
999);
BinningStrategy bin = getStrategyByUnit(Unit.HOUR);
Assert.assertEquals(
expectedMin,
bin.getBinMin(),
DELTA);
Assert.assertEquals(
expectedMax,
bin.getBinMax(),
DELTA);
Assert.assertEquals(
bin.getBinMax(),
bin.getBinnedValue(
calendar.getTimeInMillis()).getNormalizedValue(),
DELTA);
calendar.set(
Calendar.MINUTE,
0);
calendar.set(
Calendar.SECOND,
0);
calendar.set(
Calendar.MILLISECOND,
0);
Assert.assertEquals(
bin.getBinMin(),
bin.getBinnedValue(
calendar.getTimeInMillis()).getNormalizedValue(),
DELTA);
}
@Test
public void testTimeDefinitionBinByMinute() {
final double expectedMin = 0.0;
final double expectedMax = 59999.0;
final Calendar calendar = Calendar.getInstance();
calendar.set(
Calendar.SECOND,
59);
calendar.set(
Calendar.MILLISECOND,
999);
BinningStrategy bin = getStrategyByUnit(Unit.MINUTE);
Assert.assertEquals(
expectedMin,
bin.getBinMin(),
DELTA);
Assert.assertEquals(
expectedMax,
bin.getBinMax(),
DELTA);
Assert.assertEquals(
bin.getBinMax(),
bin.getBinnedValue(
calendar.getTimeInMillis()).getNormalizedValue(),
DELTA);
calendar.set(
Calendar.SECOND,
0);
calendar.set(
Calendar.MILLISECOND,
0);
Assert.assertEquals(
bin.getBinMin(),
bin.getBinnedValue(
calendar.getTimeInMillis()).getNormalizedValue(),
DELTA);
}
@Test
public void testTimeDefinitionMaxBinByDecade() {
final double expectedMin = 0.0;
final double expectedMax = 315619199999.0;
final Calendar calendar = Calendar.getInstance();
calendar.set(
Calendar.YEAR,
2009);
calendar.set(
Calendar.MONTH,
11);
calendar.set(
Calendar.DATE,
31);
calendar.set(
Calendar.HOUR_OF_DAY,
23);
calendar.set(
Calendar.MINUTE,
59);
calendar.set(
Calendar.SECOND,
59);
calendar.set(
Calendar.MILLISECOND,
999);
BinningStrategy bin = getStrategyByUnit(Unit.DECADE);
Assert.assertEquals(
expectedMin,
bin.getBinMin(),
DELTA);
Assert.assertEquals(
expectedMax,
bin.getBinMax(),
DELTA);
Assert.assertEquals(
bin.getBinMax(),
bin.getBinnedValue(
calendar.getTimeInMillis()).getNormalizedValue(),
DELTA);
}
@Test
public void testTimeDefinitionMaxBinByWeek() {
final double expectedMin = 0.0;
final double expectedMax = 604799999.0;
BinningStrategy bin = getStrategyByUnit(Unit.WEEK);
final Calendar calendar = Calendar.getInstance();
calendar.set(
Calendar.DAY_OF_WEEK,
calendar.getActualMaximum(Calendar.DAY_OF_WEEK));
calendar.set(
Calendar.HOUR_OF_DAY,
23);
calendar.set(
Calendar.MINUTE,
59);
calendar.set(
Calendar.SECOND,
59);
calendar.set(
Calendar.MILLISECOND,
999);
Assert.assertEquals(
expectedMin,
bin.getBinMin(),
DELTA);
Assert.assertEquals(
expectedMax,
bin.getBinMax(),
DELTA);
Assert.assertEquals(
bin.getBinMax(),
bin.getBinnedValue(
calendar.getTimeInMillis()).getNormalizedValue(),
DELTA);
}
private BinningStrategy getStrategyByUnit(
Unit unit ) {
return new TimeDefinition(
unit).getBinningStrategy();
}
}