package net.time4j;
import java.math.BigDecimal;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import static net.time4j.PlainTime.*;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@RunWith(JUnit4.class)
public class RatioTest {
@Test
public void nanoOfDayRatio() {
assertThat(
PlainTime.midnightAtStartOfDay().get(NANO_OF_DAY.ratio()),
is(BigDecimal.ZERO));
assertThat(
PlainTime.of(6).get(NANO_OF_DAY.ratio()),
is(new BigDecimal("0.25")));
assertThat(
PlainTime.midnightAtEndOfDay().get(NANO_OF_DAY.ratio()),
is(BigDecimal.ONE));
assertThat(
PlainTime.of(23, 59, 59, 999999999).get(NANO_OF_DAY.ratio()),
is(new BigDecimal("0.999999999999988")));
}
@Test
public void microOfDayRatio() {
BigDecimal expected = new BigDecimal("0.250000000011574");
assertThat(
PlainTime.of(6, 0, 0, 1000).get(MICRO_OF_DAY.ratio()),
is(expected));
assertThat(
PlainTime.of(6, 0, 0, 1999).get(MICRO_OF_DAY.ratio()),
is(expected));
assertThat(
PlainTime.of(6, 15, 30, 123456000).get(MICRO_OF_DAY.ratio()),
is(new BigDecimal("0.260765317777778")));
}
@Test
public void milliOfDayRatio() {
BigDecimal expected = new BigDecimal("0.2500115625");
assertThat(
PlainTime.of(6, 0, 0, 999000000).get(MILLI_OF_DAY.ratio()),
is(expected));
assertThat(
PlainTime.of(6, 0, 0, 999999999).get(MILLI_OF_DAY.ratio()),
is(expected));
assertThat(
PlainTime.of(6, 15, 30, 123000000).get(MILLI_OF_DAY.ratio()),
is(new BigDecimal("0.2607653125")));
}
@Test
public void nanoOfSecondRatio() {
assertThat(
PlainTime.of(6, 0, 0, 123456789).get(NANO_OF_SECOND.ratio()),
is(new BigDecimal("0.123456789")));
}
@Test
public void microOfSecondRatio() {
assertThat(
PlainTime.of(6, 0, 0, 123456789).get(MICRO_OF_SECOND.ratio()),
is(new BigDecimal("0.123456")));
}
@Test
public void milliOfSecondRatio() {
assertThat(
PlainTime.of(6, 0, 0, 123456789).get(MILLI_OF_SECOND.ratio()),
is(new BigDecimal("0.123")));
}
@Test
public void secondOfDayRatio() {
BigDecimal expected = new BigDecimal("0.281481481481481");
assertThat(
PlainTime.of(6, 45, 20).get(SECOND_OF_DAY.ratio()),
is(expected));
assertThat(
PlainTime.of(6, 45, 20, 1).get(SECOND_OF_DAY.ratio()),
is(expected));
}
@Test
public void minuteOfDayRatio() {
BigDecimal expected = new BigDecimal("0.258333333333333");
assertThat(
PlainTime.of(6, 12).get(MINUTE_OF_DAY.ratio()),
is(expected));
assertThat(
PlainTime.of(6, 12, 1).get(MINUTE_OF_DAY.ratio()),
is(expected));
}
@Test
public void secondOfMinuteRatio() {
assertThat(
PlainTime.of(6, 0, 30, 123456789).get(SECOND_OF_MINUTE.ratio()),
is(new BigDecimal("0.5")));
}
@Test
public void minuteOfHourRatio() {
assertThat(
PlainTime.of(6, 12, 30).get(MINUTE_OF_HOUR.ratio()),
is(new BigDecimal("0.2")));
}
@Test
public void digitalHourOfDayRatio() {
assertThat(
PlainTime.of(6, 12, 30).get(DIGITAL_HOUR_OF_DAY.ratio()),
is(new BigDecimal("0.25")));
}
@Test
public void digitalHourOfAmPmRatio() {
assertThat(
PlainTime.of(6, 12, 30).get(DIGITAL_HOUR_OF_AMPM.ratio()),
is(new BigDecimal("0.5")));
}
@Test
public void isoHourRatio() {
assertThat(
PlainTime.midnightAtStartOfDay().get(ISO_HOUR.ratio()),
is(BigDecimal.ZERO));
assertThat(
PlainTime.of(6).get(ISO_HOUR.ratio()),
is(new BigDecimal("0.25")));
assertThat(
PlainTime.of(6, 12, 30).get(ISO_HOUR.ratio()),
is(new BigDecimal("0.25")));
assertThat(
PlainTime.midnightAtEndOfDay().get(ISO_HOUR.ratio()),
is(BigDecimal.ONE));
}
@Test
public void monthAsNumberRatio() {
assertThat(
PlainDate.of(2014, 4, 20).get(PlainDate.MONTH_AS_NUMBER.ratio()),
is(new BigDecimal("0.25")));
}
@Test
public void dayOfYearRatio() {
assertThat(
PlainDate.of(2014, 4, 20).get(PlainDate.DAY_OF_YEAR.ratio()),
is(new BigDecimal("0.298630136986301")));
assertThat(
PlainDate.of(2012, 4, 20).get(PlainDate.DAY_OF_YEAR.ratio()),
is(new BigDecimal("0.300546448087432")));
}
@Test
public void dayOfQuarterRatio() {
assertThat(
PlainDate.of(2014, 4, 20).get(PlainDate.DAY_OF_QUARTER.ratio()),
is(new BigDecimal("0.208791208791209")));
}
@Test
public void dayOfMonthRatio() {
assertThat(
PlainDate.of(2014, 4, 21).get(PlainDate.DAY_OF_MONTH.ratio()),
is(new BigDecimal("0.666666666666667")));
assertThat(
PlainDate.of(2012, 2, 21).get(PlainDate.DAY_OF_MONTH.ratio()),
is(new BigDecimal("0.689655172413793")));
}
}