/* * Copyright 2011-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package kr.debop4j.timeperiod.test.timeranges; import kr.debop4j.core.Action1; import kr.debop4j.core.parallelism.Parallels; import kr.debop4j.timeperiod.TimeCalendar; import kr.debop4j.timeperiod.test.TimePeriodTestBase; import kr.debop4j.timeperiod.timerange.MinuteRange; import kr.debop4j.timeperiod.timerange.MinuteRangeCollection; import kr.debop4j.timeperiod.tools.Times; import lombok.extern.slf4j.Slf4j; import org.joda.time.DateTime; import org.junit.Test; import java.util.List; import static org.fest.assertions.Assertions.assertThat; /** * kr.debop4j.timeperiod.test.timeranges.MinuteRangeCollectionTest * * @author 배성혁 sunghyouk.bae@gmail.com * @since 13. 5. 25. 오후 9:09 */ @Slf4j public class MinuteRangeCollectionTest extends TimePeriodTestBase { @Test public void singleMinutes() { DateTime now = Times.now(); MinuteRangeCollection minutes = new MinuteRangeCollection(now, 1, TimeCalendar.getEmptyOffset()); DateTime startTime = Times.trimToSecond(now); DateTime endTime = Times.trimToSecond(now).plusMinutes(1); assertThat(minutes.getMinuteCount()).isEqualTo(1); assertThat(minutes.getStart()).isEqualTo(startTime); assertThat(minutes.getEnd()).isEqualTo(endTime); List<MinuteRange> mins = minutes.getMinutes(); assertThat(mins.size()).isEqualTo(1); assertThat(mins.get(0).getStart()).isEqualTo(startTime); assertThat(mins.get(0).getEnd()).isEqualTo(endTime); } @Test public void calendarMinutes() { DateTime now = Times.now(); for (int m = 1; m < 97; m += 5) { MinuteRangeCollection minutes = new MinuteRangeCollection(now, m); DateTime startTime = Times.trimToSecond(now); DateTime endTime = Times.trimToSecond(now).plusMinutes(m).plus(minutes.getTimeCalendar().getEndOffset()); assertThat(minutes.getMinuteCount()).isEqualTo(m); assertThat(minutes.getStart()).isEqualTo(startTime); assertThat(minutes.getEnd()).isEqualTo(endTime); List<MinuteRange> items = minutes.getMinutes(); for (int i = 0; i < m; i++) { assertThat(items.get(i).getStart()).isEqualTo(startTime.plusMinutes(i)); assertThat(items.get(i).getUnmappedStart()).isEqualTo(startTime.plusMinutes(i)); assertThat(items.get(i).getEnd()).isEqualTo(minutes.getTimeCalendar().mapEnd(startTime.plusMinutes(i + 1))); assertThat(items.get(i).getUnmappedEnd()).isEqualTo(startTime.plusMinutes(i + 1)); } } } @Test public void minutesTest() { final int[] minuteCounts = new int[] { 1, 24, 48, 64, 128 }; final DateTime now = Times.now(); for (int minuteCount : minuteCounts) { final MinuteRangeCollection minuteRanges = new MinuteRangeCollection(now, minuteCount); final DateTime startTime = Times.trimToSecond(now).plus(minuteRanges.getTimeCalendar().getStartOffset()); final DateTime endTime = startTime.plusMinutes(minuteCount).plus(minuteRanges.getTimeCalendar().getEndOffset()); assertThat(minuteRanges.getStart()).isEqualTo(startTime); assertThat(minuteRanges.getEnd()).isEqualTo(endTime); assertThat(minuteRanges.getMinuteCount()).isEqualTo(minuteCount); final List<MinuteRange> items = minuteRanges.getMinutes(); assertThat(items.size()).isEqualTo(minuteCount); Parallels.run(minuteCount, new Action1<Integer>() { @Override public void perform(Integer m) { assertThat(items.get(m).getStart()).isEqualTo(startTime.plusMinutes(m)); assertThat(items.get(m).getEnd()).isEqualTo(minuteRanges.getTimeCalendar().mapEnd(startTime.plusMinutes(m + 1))); assertThat(items.get(m).getUnmappedEnd()).isEqualTo(startTime.plusMinutes(m + 1)); } }); } } }