package kr.debop4j.core.collection;
import com.google.common.collect.Lists;
import kr.debop4j.core.tools.StringTool;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import java.util.List;
import static org.junit.Assert.assertEquals;
/**
* kr.debop4j.core.collection.NumberRangeTest
*
* @author 배성혁 ( sunghyouk.bae@gmail.com )
* @since 13. 1. 12.
*/
@Slf4j
public class NumberRangeTest {
@Test
public void createIntRange() {
NumberRange.IntRange intRange = NumberRange.range(10);
assertEquals(0, intRange.getFromInclude());
assertEquals(10, intRange.getToExclude());
assertEquals(1, intRange.getStep());
assertEquals(10, intRange.size());
log.debug(StringTool.join(intRange, ","));
intRange.reset();
for (int x : intRange)
System.out.print(x + ", ");
}
@Test
public void createIntPartition() {
int from = 0;
int to = 100;
int partitionCount = 4;
int partitionSize = (to - from) / partitionCount + ((to - from) % partitionCount > 0 ? 1 : 0);
List<NumberRange.IntRange> ranges = NumberRange.partition(from, to, partitionCount);
assertEquals(4, ranges.size());
for (int i = 0; i < partitionCount; i++) {
NumberRange.IntRange intRange = ranges.get(i);
assertEquals(from + i * partitionSize, intRange.getFromInclude());
assertEquals(from + (i + 1) * partitionSize, intRange.getToExclude());
assertEquals(1, intRange.getStep());
assertEquals(partitionSize, intRange.size());
}
}
@Test
public void createIntPartitionUnnormal() {
int from = 0;
int to = 102;
int partitionCount = 4;
int partitionSize = (to - from) / partitionCount;
List<NumberRange.IntRange> ranges = NumberRange.partition(from, to, partitionCount);
assertEquals(4, ranges.size());
List<int[]> expectedList =
Lists.newArrayList(
new int[] { 0, 26, 1, 26 },
new int[] { 26, 52, 1, 26 },
new int[] { 52, 77, 1, 25 },
new int[] { 77, 102, 1, 25 });
for (int i = 0; i < partitionCount; i++) {
NumberRange.IntRange intRange = ranges.get(i);
int[] expected = expectedList.get(i);
if (log.isDebugEnabled())
log.debug("NumberRange({})=[{}]", i, intRange);
assertEquals(expected[0], intRange.getFromInclude());
assertEquals(expected[1], intRange.getToExclude());
assertEquals(expected[2], intRange.getStep());
assertEquals(expected[3], intRange.size());
}
}
@Test
public void createIntPartitionUnnormalInverse() {
int from = 102;
int to = 0;
int partitionCount = 4;
int partitionSize = (to - from) / partitionCount;
List<NumberRange.IntRange> ranges = NumberRange.partition(from, to, partitionCount);
assertEquals(4, ranges.size());
List<int[]> expectedList =
Lists.newArrayList(
new int[] { 102, 76, -1, 26 },
new int[] { 76, 50, -1, 26 },
new int[] { 50, 25, -1, 25 },
new int[] { 25, 0, -1, 25 });
for (int i = 0; i < partitionCount; i++) {
NumberRange.IntRange intRange = ranges.get(i);
int[] expected = expectedList.get(i);
if (log.isDebugEnabled())
log.debug("NumberRange({})=[{}]", i, intRange);
assertEquals(expected[0], intRange.getFromInclude());
assertEquals(expected[1], intRange.getToExclude());
assertEquals(expected[2], intRange.getStep());
assertEquals(expected[3], intRange.size());
}
}
}