package net.time4j.history;
import net.time4j.PlainDate;
import net.time4j.engine.EpochDays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@RunWith(Parameterized.class)
public class JulianTransformationTest {
@Parameterized.Parameters(name= "{index}: mjd-days({0}-{1}-{2})={3}")
public static Iterable<Object[]> data() {
return Arrays.asList(
new Object[][]{
{-999979466, 11, 21, PlainDate.axis().getMinimum().get(EpochDays.MODIFIED_JULIAN_DATE)},
{-4712, 1, 1, PlainDate.of(-4713, 11, 24).get(EpochDays.MODIFIED_JULIAN_DATE)},
{0, 1, 1, PlainDate.of(-1, 12, 30).get(EpochDays.MODIFIED_JULIAN_DATE)},
{1582, 10, 5, PlainDate.of(1582, 10, 15).get(EpochDays.MODIFIED_JULIAN_DATE)},
{1582, 10, 4, PlainDate.of(1582, 10, 14).get(EpochDays.MODIFIED_JULIAN_DATE)},
{1752, 9, 3, PlainDate.of(1752, 9, 14).get(EpochDays.MODIFIED_JULIAN_DATE)},
{2015, 3, 23, PlainDate.of(2015, 4, 5).get(EpochDays.MODIFIED_JULIAN_DATE)},
{2100, 2, 15, PlainDate.of(2100, 2, 28).get(EpochDays.MODIFIED_JULIAN_DATE)},
{2100, 2, 16, PlainDate.of(2100, 3, 1).get(EpochDays.MODIFIED_JULIAN_DATE)},
{2100, 2, 28, PlainDate.of(2100, 3, 13).get(EpochDays.MODIFIED_JULIAN_DATE)},
{2100, 2, 29, PlainDate.of(2100, 3, 14).get(EpochDays.MODIFIED_JULIAN_DATE)},
{2100, 3, 1, PlainDate.of(2100, 3, 15).get(EpochDays.MODIFIED_JULIAN_DATE)},
}
);
}
private int year;
private int month;
private int dom;
private long mjd;
public JulianTransformationTest(
int year,
int month,
int dom,
long mjd
) {
super();
this.year = year;
this.month = month;
this.dom = dom;
this.mjd = mjd;
}
@Test
public void fromMJD() {
long packed = JulianMath.toPackedDate(this.mjd);
assertThat(JulianMath.readYear(packed), is(this.year));
assertThat(JulianMath.readMonth(packed), is(this.month));
assertThat(JulianMath.readDayOfMonth(packed), is(this.dom));
}
@Test
public void toMJD() {
assertThat(
JulianMath.toMJD(this.year, this.month, this.dom),
is(this.mjd));
}
}