package net.time4j;
import java.text.ParseException;
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 ClockDurationTest {
@Test
public void plusClockUnits() {
Duration<ClockUnit> duration = Duration.ofClockUnits(2, 0, 3);
assertThat(
PlainTime.of(4, 26, 59, 987654321).plus(duration),
is(PlainTime.of(6, 27, 2, 987654321)));
}
@Test
public void untilInClockUnits() {
PlainTime t1 = PlainTime.of(4, 26, 59, 987654321);
PlainTime t2 = PlainTime.of(5, 26, 57, 987654320);
assertThat(
t2.until(t1, Duration.inClockUnits()),
is(
Duration.ofClockUnits(0, 59, 57)
.plus(999999999, ClockUnit.NANOS)
.inverse()));
}
@Test
public void untilInSecondsNanos() {
PlainTime t1 = PlainTime.of(4, 26, 59, 987654321);
PlainTime t2 = PlainTime.of(5, 26, 57, 987654320);
assertThat(
t1.until(t2, Duration.in(ClockUnit.SECONDS, ClockUnit.NANOS)),
is(
Duration.of(3597, ClockUnit.SECONDS)
.plus(999999999, ClockUnit.NANOS)));
}
@Test
public void untilInHoursMinutes() {
PlainTime t1 = PlainTime.of(4, 26, 59, 987654321);
PlainTime t2 = PlainTime.of(5, 26, 57, 987654320);
assertThat(
t2.until(t1, Duration.in(ClockUnit.HOURS, ClockUnit.MINUTES)),
is(Duration.of(-59, ClockUnit.MINUTES)));
}
@Test
public void untilInHoursSeconds() {
PlainTime t1 = PlainTime.of(4, 26, 59, 987654321);
PlainTime t2 = PlainTime.of(5, 26, 57, 987654320);
assertThat(
t1.until(t2, Duration.in(ClockUnit.HOURS, ClockUnit.SECONDS)),
is(Duration.of(3597, ClockUnit.SECONDS)));
}
@Test
public void untilInMinutesSeconds() {
PlainTime t1 = PlainTime.of(4, 26, 59, 987654321);
PlainTime t2 = PlainTime.of(5, 26, 57, 987654320);
assertThat(
t1.until(t2, Duration.in(ClockUnit.MINUTES, ClockUnit.SECONDS)),
is(Duration.ofClockUnits(0, 59, 57)));
}
@Test
public void untilInSeconds() {
PlainTime t1 = PlainTime.of(4, 26, 59, 987654321);
PlainTime t2 = PlainTime.of(5, 26, 57, 987654320);
assertThat(t2.until(t1, ClockUnit.SECONDS), is(-3597L));
assertThat(t1.until(t2, ClockUnit.SECONDS), is(3597L));
}
@Test
public void normalize() {
PlainTime t1 = PlainTime.of(4, 26, 59, 988654321);
PlainTime t2 = PlainTime.of(5, 26, 57, 987654320);
Duration<ClockUnit> timeSpan =
Duration.ofClockUnits(0, 59, 57).plus(998999999, ClockUnit.NANOS);
assertThat(
t1.until(t1.plus(timeSpan), Duration.inClockUnits()),
is(timeSpan));
assertThat(
t1.plus(timeSpan),
is(t2));
}
@Test
public void convertToHours() throws ParseException {
Duration<ClockUnit> duration = Duration.parseClockPeriod("PT121M3612,123456789S");
assertThat(ClockUnit.HOURS.convert(duration), is(3L));
}
@Test
public void convertToMinutes() throws ParseException {
Duration<ClockUnit> duration = Duration.parseClockPeriod("PT21M12.667S");
assertThat(ClockUnit.MINUTES.convert(duration), is(21L));
}
@Test
public void convertToSeconds() throws ParseException {
Duration<ClockUnit> duration = Duration.parseClockPeriod("PT21M12.667S");
assertThat(ClockUnit.SECONDS.convert(duration), is(1272L));
}
@Test
public void convertToMillis() throws ParseException {
Duration<ClockUnit> duration = Duration.parseClockPeriod("PT21M12.667S");
assertThat(ClockUnit.MILLIS.convert(duration), is(1272667L));
}
}