package org.ovirt.engine.core.utils;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.math.LongRange;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
public class DisjointRangesTest {
@Rule
public final RandomUtilsSeedingRule rusr = new RandomUtilsSeedingRule();
@Parameterized.Parameter(0)
public List<LongRange> inputRanges;
@Parameterized.Parameter(1)
public List<LongRange> expectedRanges;
@Parameterized.Parameters
public static Object[][] parameters() {
return new Object[][] {
{ Collections.<LongRange>emptyList(), Collections.<LongRange>emptyList() },
{ Collections.singletonList(pair(1, 2)), Collections.singletonList(pair(1, 2)) },
{ Arrays.asList(pair(1, 2), pair(3, 4)), Arrays.asList(pair(1, 2), pair(3, 4)) },
{ Arrays.asList(pair(1, 3), pair(2, 5)), Collections.singletonList(pair(1, 5)) },
{ Arrays.asList(pair(1, 3), pair(5, 7), pair(6, 7)), Arrays.asList(pair(1, 3), pair(5, 7)) },
{ Arrays.asList(pair(1, 2), pair(5, 7), pair(4, 7)), Arrays.asList(pair(1, 2), pair(4, 7)) },
{ Arrays.asList(pair(1, 3), pair(5, 7), pair(4, 7)), Arrays.asList(pair(1, 3), pair(4, 7)) },
{ Arrays.asList(pair(1, 2), pair(5, 6), pair(9, 11), pair(3, 11)), Arrays.asList(pair(1, 2), pair(3, 11)) },
{ Arrays.asList(pair(1, 2), pair(5, 6), pair(9, 11), pair(3, 12)), Arrays.asList(pair(1, 2), pair(3, 12)) },
{ Arrays.asList(pair(1, 2), pair(5, 6), pair(9, 11), pair(3, 8)), Arrays.asList(pair(1, 2), pair(3, 8), pair(9, 11)) },
{ Arrays.asList(pair(1, 3), pair(5, 6), pair(9, 11), pair(-1, 8)), Arrays.asList(pair(-1, 8), pair(9, 11)) }
};
}
private static LongRange pair(long from, long to) {
return new LongRange(from, to);
}
@Test
public void test() throws Exception {
Collections.shuffle(inputRanges, RandomUtils.instance());
doTest(inputRanges);
}
private void doTest(List<LongRange> inputRanges) {
DisjointRanges disjointRanges = new DisjointRanges();
disjointRanges.addRanges(inputRanges);
Collection<LongRange> result = disjointRanges.getRanges();
assertTrue(CollectionUtils.isEqualCollection(expectedRanges, result));
}
}