package net.time4j.calendar;
import net.time4j.engine.CalendarDays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@RunWith(JUnit4.class)
public class HijriUnitTest {
@Test
public void plusMonths() {
HijriCalendar hijri = HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_ASTRO, 1437, 12, 1);
for (int m = 1; m <= 13; m++) {
hijri = hijri.with(HijriCalendar.DAY_OF_MONTH.maximized()); // last day of month
HijriCalendar test = hijri.plus(1, HijriCalendar.Unit.MONTHS);
assertThat(
hijri.with(HijriCalendar.MONTH_OF_YEAR.incremented()),
is(test));
hijri = test;
}
}
@Test
public void minusMonths() {
HijriCalendar hijri = HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_ASTRO, 1437, 12, 1);
for (int m = 1; m <= 13; m++) {
hijri = hijri.with(HijriCalendar.DAY_OF_MONTH.maximized()); // last day of month
HijriCalendar test = hijri.minus(1, HijriCalendar.Unit.MONTHS);
assertThat(
hijri.with(HijriCalendar.MONTH_OF_YEAR.decremented()),
is(test));
hijri = test;
}
}
@Test
public void monthsBetween() {
HijriCalendar start = HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_ASTRO, 1436, 12, 30);
HijriCalendar end = HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_CIVIL, 1439, 3, 29);
// start.withVariant(HijriCalendar.VARIANT_UMALQURA); // AH-1436-12-30[islamic-umalqura]
// end.withVariant(HijriCalendar.VARIANT_UMALQURA); // AH-1439-03-30[islamic-umalqura]
assertThat(
HijriCalendar.Unit.MONTHS.between(start, end, HijriCalendar.VARIANT_UMALQURA),
is(27));
assertThat(
start.plus(27, HijriCalendar.Unit.MONTHS),
is(end.withVariant(HijriAlgorithm.EAST_ISLAMIC_ASTRO)));
assertThat(
HijriCalendar.Unit.MONTHS.between(
start,
end.minus(1, HijriCalendar.Unit.DAYS),
HijriCalendar.VARIANT_UMALQURA),
is(26));
}
@Test
public void yearsBetween() {
HijriCalendar start = HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_ASTRO, 1436, 12, 30);
HijriCalendar end = HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_CIVIL, 1438, 12, 29);
assertThat(
HijriCalendar.Unit.YEARS.between(start, end, HijriCalendar.VARIANT_UMALQURA),
is(2));
assertThat(
start.plus(2, HijriCalendar.Unit.YEARS),
is(HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_ASTRO, 1438, 12, 29)));
assertThat(
HijriCalendar.Unit.YEARS.between(
start,
end.minus(1, HijriCalendar.Unit.DAYS),
HijriCalendar.VARIANT_UMALQURA),
is(1));
}
@Test
public void daysBetween() {
HijriCalendar start = HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_ASTRO, 1436, 12, 30);
HijriCalendar end = HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_CIVIL, 1438, 12, 29);
int delta = (int) CalendarDays.between(start, end).getAmount(); // 709
assertThat(
HijriCalendar.Unit.DAYS.between(start, end, HijriCalendar.VARIANT_UMALQURA),
is(delta));
assertThat(
start.plus(delta, HijriCalendar.Unit.DAYS),
is(end.withVariant(HijriAlgorithm.EAST_ISLAMIC_ASTRO)));
}
@Test
public void weeksBetween() {
HijriCalendar start = HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_ASTRO, 1436, 12, 30);
HijriCalendar end = HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_CIVIL, 1438, 12, 29);
assertThat(
HijriCalendar.Unit.WEEKS.between(start, end, HijriCalendar.VARIANT_UMALQURA),
is(101));
assertThat(
start.plus(101, HijriCalendar.Unit.WEEKS),
is(HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_ASTRO, 1438, 12, 28)));
}
}