blob: 3619b83bb4257e602ccba720c94db2d4ebc1fa39 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.commons.functor.range;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.apache.commons.functor.BaseFunctorTest;
import org.apache.commons.functor.Function;
import org.apache.commons.functor.generator.Generator;
import org.apache.commons.functor.generator.loop.IteratorToGeneratorAdapter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* @version $Revision: 1515264 $ $Date: 2013-08-18 23:51:41 -0300 (Sun, 18 Aug 2013) $
*/
public class TestIntegerRange extends BaseFunctorTest {
// Attributes
// ------------------------------------------------------------------------
private IntegerRange ascIntRange = null;
private IntegerRange descIntRange = null;
private Collection<Integer> expectedAsc = null;
private Collection<Integer> expectedDesc = null;
// Test set up
// ------------------------------------------------------------------------
@Before
public void setUp() {
ascIntRange = Ranges.integerRange(0, 10);
descIntRange = Ranges.integerRange(10, 0);
expectedAsc = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
expectedDesc = Arrays.asList(10, 9, 8, 7, 6, 5, 4, 3, 2, 1);
}
@After
public void tearDown() {
ascIntRange = null;
descIntRange = null;
}
@Override
protected Object makeFunctor() throws Exception {
return Ranges.integerRange(10, 20);
}
// Generator tests
// ------------------------------------------------------------------------
@Test
public void testGenerateListExample() {
// generates a collection of Integers from 0 (inclusive) to 10 (exclusive)
{
List<? super Integer> list = (List<? super Integer>) (
IteratorToGeneratorAdapter.adapt(Ranges.integerRange(0,10)).to(new ArrayList<Integer>()));
for (int i=0;i<10;i++) {
assertEquals(Integer.valueOf(i),list.get(i));
}
}
// generates a collection of Integers from 10 (inclusive) to 0 (exclusive)
{
List<? super Integer> list = (List<? super Integer>) (
IteratorToGeneratorAdapter.adapt(Ranges.integerRange(10,0)).to(new ArrayList<Integer>()));
for (int i=10;i>0;i--) {
assertEquals(Integer.valueOf(i),list.get(10-i));
}
}
}
@Test
public void testStepChecking() {
{
Ranges.integerRange(2, 2, 0); // step of 0 is ok when range is empty
}
{
Ranges.integerRange(2, 2, 1); // positive step is ok when range is empty
}
{
Ranges.integerRange(2, 2, -1); // negative step is ok when range is empty
}
{
Ranges.integerRange(0, 1, 10); // big steps are ok
}
{
Ranges.integerRange(1, 0, -10); // big steps are ok
}
try {
Ranges.integerRange(0, 1, 0);
fail("Expected IllegalArgumentException");
} catch(IllegalArgumentException e) {
// expected
}
try {
Ranges.integerRange(0, 1, -1);
fail("Expected IllegalArgumentException");
} catch(IllegalArgumentException e) {
// expected
}
try {
Ranges.integerRange(0, -1, 1);
fail("Expected IllegalArgumentException");
} catch(IllegalArgumentException e) {
// expected
}
}
@Test
public void testObjectConstructor() {
IntegerRange range = Ranges.integerRange(Integer.valueOf(0), Integer.valueOf(5));
assertEquals("[0, 1, 2, 3, 4]", IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
range = Ranges.integerRange(Integer.valueOf(0), Integer.valueOf(5), Integer.valueOf(1));
assertEquals("[0, 1, 2, 3, 4]", IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
}
@Test
public void testReverseStep() {
IntegerRange range = Ranges.integerRange(10, 0, -2);
assertEquals("[10, 8, 6, 4, 2]", IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
}
@Test
public void testStep() {
IntegerRange range = Ranges.integerRange(0, 10, 2);
assertEquals("[0, 2, 4, 6, 8]", IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
}
@Test
public void testForwardRange() {
IntegerRange range = Ranges.integerRange(0, 5);
assertEquals("[0, 1, 2, 3, 4]", IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
}
@Test
public void testReverseRange() {
IntegerRange range = Ranges.integerRange(5, 0);
assertEquals("[5, 4, 3, 2, 1]", IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
}
@Test
public void testEdgeCase() {
IntegerRange range = Ranges.integerRange(Integer.MAX_VALUE - 3, Integer.MAX_VALUE);
assertEquals("[2147483644, 2147483645, 2147483646]", IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
}
@Test
public void testBoundaries() {
IntegerRange range = Ranges.integerRange(0, 10);
assertEquals(new Endpoint<Comparable<?>>(0, BoundType.CLOSED),
range.getLeftEndpoint());
assertEquals(new Endpoint<Comparable<?>>(10, BoundType.OPEN),
range.getRightEndpoint());
}
@Test
public void testClosedClosedAscending() {
// [-5, 5], 3 = -5, -2, 1, 4
IntegerRange range = Ranges.integerRange(-5, BoundType.CLOSED, 5,
BoundType.CLOSED, 3);
// [-5, 5], 3 = -5, -2, 1, 4
List<Integer> expected = Arrays.asList(-5, -2, 1, 4);
Collection<Integer> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testOpenClosedAscending() {
// (-5, 5], 3 = -2, 1, 4
IntegerRange range = Ranges.integerRange(-5, BoundType.OPEN, 5,
BoundType.CLOSED, 3);
// (-5, 5], 3 = -2, 1, 4
List<Integer> expected = Arrays.asList(-2, 1, 4);
Collection<Integer> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testClosedOpenAscending() {
// [-5, 5), 3 = -5, -2, 1, 4
IntegerRange range = Ranges.integerRange(-5, BoundType.CLOSED, 5,
BoundType.OPEN, 3);
// (-5, 5], 3 = -5, -2, 1, 4
List<Integer> expected = Arrays.asList(-5, -2, 1, 4);
Collection<Integer> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testOpenOpenAscending() {
// (-5, 5), 3 = -2, 1, 4
IntegerRange range = Ranges.integerRange(-5, BoundType.OPEN, 5,
BoundType.OPEN, 3);
// (-5, 5), 3 = -2, 1, 4
List<Integer> expected = Arrays.asList(-2, 1, 4);
Collection<Integer> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testSingleStepAscending() {
// (-2, 2], 1 = -1, 0, 1, 2
IntegerRange range = Ranges.integerRange(-2, BoundType.OPEN, 2,
BoundType.CLOSED, 1);
// (-2, 2], 1 = -1, 0, 1, 2
List<Integer> expected = Arrays.asList(-1, 0, 1, 2);
Collection<Integer> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testClosedClosedDescending() {
// [5, -5], -3 = 5, 2, -1, -4
IntegerRange range = Ranges.integerRange(5, BoundType.CLOSED, -5,
BoundType.CLOSED, -3);
// [5, -5], -3 = 5, 2, -1, -4
List<Integer> expected = Arrays.asList(5, 2, -1, -4);
Collection<Integer> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testOpenClosedDescending() {
// (5, -5], -3 = 2, -1, -4
IntegerRange range = Ranges.integerRange(5, BoundType.OPEN, -5,
BoundType.CLOSED, -3);
// (5, -5], -3 = 2, -1, -4
List<Integer> expected = Arrays.asList(2, -1, -4);
Collection<Integer> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testClosedOpenDescending() {
// [5, -5), -3 = 5, 2, -1, -4
IntegerRange range = Ranges.integerRange(5, BoundType.CLOSED, -5,
BoundType.OPEN, -3);
// [5, -5), -3 = 5, 2, -1, -4
List<Integer> expected = Arrays.asList(5, 2, -1, -4);
Collection<Integer> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testOpenOpenDescending() {
// (5, -5), -3 = 2, -1, -4
IntegerRange range = Ranges.integerRange(5, BoundType.OPEN, -5,
BoundType.OPEN, -3);
// (5, -5), -3 = 2, -1, -4
List<Integer> expected = Arrays.asList(2, -1, -4);
Collection<Integer> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testSingleStepDescending() {
// [2, -2), -1 = 2, 1, 0, -1
IntegerRange range = Ranges.integerRange(2, BoundType.CLOSED, -2,
BoundType.OPEN, -1);
// [2, -2), -1 = 2, 1, 0, -1
List<Integer> expected = Arrays.asList(2, 1, 0, -1);
Collection<Integer> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testAscending() {
final List<Integer> list = new ArrayList<Integer>();
for (int i : ascIntRange) {
list.add(i);
}
assertTrue(expectedAsc.containsAll(list));
}
@Test
public void testDescending() {
final List<Integer> list = new ArrayList<Integer>();
for (int i : descIntRange) {
list.add(i);
}
assertTrue(expectedDesc.containsAll(list));
}
@Test
public void testToCollection() {
Collection<Integer> ascCol = IteratorToGeneratorAdapter.adapt(ascIntRange).toCollection();
assertEquals("Different collections", expectedAsc, ascCol);
Collection<Integer> descCol = IteratorToGeneratorAdapter.adapt(descIntRange).toCollection();
assertEquals("Different collections", expectedDesc, descCol);
}
@Test
public void testTransformedGenerator() {
int expected = 45;
int total = IteratorToGeneratorAdapter.adapt(ascIntRange)
.to(new Function<Generator<? extends Integer>, Integer>() {
public Integer evaluate(Generator<? extends Integer> obj) {
int total = 0;
for (Object element : obj.toCollection()) {
total += (Integer) element;
}
return total;
}
});
assertEquals(expected, total);
expected = 55;
total = IteratorToGeneratorAdapter.adapt(descIntRange)
.to(new Function<Generator<? extends Integer>, Integer>() {
public Integer evaluate(Generator<? extends Integer> obj) {
int total = 0;
for (Object element : obj.toCollection()) {
total += (Integer) element;
}
return total;
}
});
assertEquals(expected, total);
}
// Range tests
// ---------------------------------------------------------------
// A base range with all integers between -6 and 6
private final List<Integer> fullRange = Collections.unmodifiableList(Arrays
.asList(-6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6));
@Test
public void testEmptyRanges() {
IntegerRange empty1 = Ranges.integerRange(-2, BoundType.OPEN, -1,
BoundType.OPEN, 2);
assertTrue("The range was expected to be empty.", empty1.isEmpty());
IntegerRange empty2 = Ranges.integerRange(2, BoundType.OPEN, 0,
BoundType.OPEN, -2);
assertTrue("The range was expected to be empty.", empty2.isEmpty());
IntegerRange empty3 = Ranges.integerRange(0, BoundType.OPEN, 1,
BoundType.CLOSED, 2);
assertTrue("The range was expected to be empty.", empty3.isEmpty());
IntegerRange empty4 = Ranges.integerRange(-3, BoundType.OPEN, -3,
BoundType.OPEN, 1);
assertTrue("The range was expected to be empty.", empty4.isEmpty());
IntegerRange empty5 = Ranges.integerRange(-3, BoundType.CLOSED, -3,
BoundType.OPEN, 1);
assertTrue("The range was expected to be empty.", empty5.isEmpty());
IntegerRange empty6 = Ranges.integerRange(1, BoundType.OPEN, 0,
BoundType.CLOSED, -2);
assertTrue("The range was expected to be empty.", empty6.isEmpty());
IntegerRange notEmpty1 = Ranges.integerRange(-3, BoundType.CLOSED, -3,
BoundType.CLOSED, 1);
assertFalse("The range was not expected to be empty.",
notEmpty1.isEmpty());
IntegerRange notEmpty2 = Ranges.integerRange(-3, BoundType.OPEN, -2,
BoundType.CLOSED, 1);
assertFalse("The range was not expected to be empty.",
notEmpty2.isEmpty());
IntegerRange notEmpty3 = Ranges.integerRange(2, BoundType.OPEN, 1,
BoundType.CLOSED, -1);
assertFalse("The range was not expected to be empty.",
notEmpty3.isEmpty());
IntegerRange notEmpty4 = Ranges.integerRange(2, BoundType.CLOSED, 1,
BoundType.OPEN, -1);
assertFalse("The range was not expected to be empty.",
notEmpty4.isEmpty());
IntegerRange notEmpty5 = Ranges.integerRange(1, BoundType.CLOSED, 2,
BoundType.OPEN, 1);
assertFalse("The range was not expected to be empty.",
notEmpty5.isEmpty());
}
@Test
public void testClosedClosedAscendingContains() {
// [-5, 5], 3 = -5, -2, 1, 4
IntegerRange range = Ranges.integerRange(-5, BoundType.CLOSED, 5,
BoundType.CLOSED, 3);
// [-5, 5], 3 = -5, -2, 1, 4
List<Integer> arr = Arrays.asList(-5, -2, 1, 4);
for (Integer element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Integer> elementsNotPresent = new ArrayList<Integer>(fullRange);
elementsNotPresent.removeAll(arr);
for (Integer element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testOpenClosedAscendingContains() {
// (-5, 5], 3 = -2, 1, 4
IntegerRange range = Ranges.integerRange(-5, BoundType.OPEN, 5,
BoundType.CLOSED, 3);
// (-5, 5], 3 = -2, 1, 4
List<Integer> arr = Arrays.asList(-2, 1, 4);
for (Integer element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Integer> elementsNotPresent = new ArrayList<Integer>(fullRange);
elementsNotPresent.removeAll(arr);
for (Integer element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testClosedOpenAscendingContains() {
// [-5, 5), 3 = -5, -2, 1, 4
IntegerRange range = Ranges.integerRange(-5, BoundType.CLOSED, 5,
BoundType.OPEN, 3);
// (-5, 5], 3 = -5, -2, 1, 4
List<Integer> arr = Arrays.asList(-5, -2, 1, 4);
for (Integer element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Integer> elementsNotPresent = new ArrayList<Integer>(fullRange);
elementsNotPresent.removeAll(arr);
for (Integer element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testOpenOpenAscendingContains() {
// (-5, 5), 3 = -2, 1, 4
IntegerRange range = Ranges.integerRange(-5, BoundType.OPEN, 5,
BoundType.OPEN, 3);
// (-5, 5), 3 = -2, 1, 4
List<Integer> arr = Arrays.asList(-2, 1, 4);
for (Integer element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Integer> elementsNotPresent = new ArrayList<Integer>(fullRange);
elementsNotPresent.removeAll(arr);
for (Integer element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testContainsSingleStepAscending() {
// (-2, 2], 1 = -1, 0, 1, 2
IntegerRange ascendingRange = Ranges.integerRange(-2, BoundType.OPEN, 2,
BoundType.CLOSED, 1);
// (-2, 2], 1 = -1, 0, 1, 2
List<Integer> arr = Arrays.asList(-1, 0, 1, 2);
for (Integer element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + ascendingRange + "]",
ascendingRange.contains(element));
}
List<Integer> elementsNotPresent = new ArrayList<Integer>(fullRange);
elementsNotPresent.removeAll(arr);
for (Integer element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + ascendingRange +
"]",
ascendingRange.contains(element));
}
}
@Test
public void testClosedClosedDescendingContains() {
// [5, -5], -3 = 5, 2, -1, -4
IntegerRange range = Ranges.integerRange(5, BoundType.CLOSED, -5,
BoundType.CLOSED, -3);
// [5, -5], -3 = 5, 2, -1, -4
List<Integer> arr = Arrays.asList(5, 2, -1, -4);
for (Integer element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Integer> elementsNotPresent = new ArrayList<Integer>(fullRange);
elementsNotPresent.removeAll(arr);
for (Integer element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testOpenClosedDescendingContains() {
// (5, -5], -3 = 2, -1, -4
IntegerRange range = Ranges.integerRange(5, BoundType.OPEN, -5,
BoundType.CLOSED, -3);
// (5, -5], -3 = 2, -1, -4
List<Integer> arr = Arrays.asList(2, -1, -4);
for (Integer element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Integer> elementsNotPresent = new ArrayList<Integer>(fullRange);
elementsNotPresent.removeAll(arr);
for (Integer element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testClosedOpenDescendingContains() {
// [5, -5), -3 = 5, 2, -1, -4
IntegerRange range = Ranges.integerRange(5, BoundType.CLOSED, -5,
BoundType.OPEN, -3);
// [5, -5), -3 = 5, 2, -1, -4
List<Integer> arr = Arrays.asList(5, 2, -1, -4);
for (Integer element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Integer> elementsNotPresent = new ArrayList<Integer>(fullRange);
elementsNotPresent.removeAll(arr);
for (Integer element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testOpenOpenDescendingContains() {
// (5, -5), -3 = 2, -1, -4
IntegerRange range = Ranges.integerRange(5, BoundType.OPEN, -5,
BoundType.OPEN, -3);
// (5, -5), -3 = 2, -1, -4
List<Integer> arr = Arrays.asList(2, -1, -4);
for (Integer element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Integer> elementsNotPresent = new ArrayList<Integer>(fullRange);
elementsNotPresent.removeAll(arr);
for (Integer element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testContainsSingleStepDescending() {
// [2, -2), -1 = 2, 1, 0, -1
IntegerRange descendingRange = Ranges.integerRange(2, BoundType.CLOSED,
-2, BoundType.OPEN, -1);
// [2, -2), -1 = 2, 1, 0, -1
List<Integer> arr = Arrays.asList(2, 1, 0, -1);
for (Integer element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + descendingRange +
"]",
descendingRange.contains(element));
}
List<Integer> elementsNotPresent = new ArrayList<Integer>(fullRange);
elementsNotPresent.removeAll(arr);
for (Integer element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + descendingRange +
"]",
descendingRange.contains(element));
}
}
@Test
public void testContainsNullOrEmpty() {
IntegerRange range = Ranges.integerRange(-2, BoundType.OPEN, 2,
BoundType.CLOSED, 1);
assertFalse(range.contains(null));
}
@SuppressWarnings("unchecked")
@Test
public void testContainsAll() {
// (-2, 2], 1 = -1, 0, 1, 2
IntegerRange range = Ranges.integerRange(-2, BoundType.OPEN, 2,
BoundType.CLOSED, 1);
List<Integer> list = Arrays.asList(-1, 0, 1, 2);
assertTrue("Range [" + range +
"] was expected to contain all elements from list [" + list +
"]", range.containsAll(list));
List<Integer> listWithExtraElements = Arrays.asList(2, -1, 0, 1, 2, 3);
assertFalse("Range [" + range + "] has more elements than expected",
range.containsAll(listWithExtraElements));
assertFalse(range.containsAll(null));
assertFalse(range.containsAll(Collections.EMPTY_LIST));
}
@Test
public void testEquals()
throws Exception {
// equals basic properties
IntegerRange range = Ranges.integerRange(-2, BoundType.CLOSED, 2,
BoundType.OPEN, 1);
assertEquals("equals must be reflexive", range, range);
assertEquals("hashCode must be reflexive", range.hashCode(),
range.hashCode());
assertTrue(!range.equals(null)); // should be able to compare to null
Object range2 = Ranges.integerRange(-2, BoundType.CLOSED, 2,
BoundType.OPEN, 1);
if (range.equals(range2)) {
assertEquals("equals implies hash equals", range.hashCode(),
range2.hashCode());
assertEquals("equals must be symmetric", range2, range);
} else {
assertTrue("equals must be symmetric", !range2.equals(range));
}
// Changing attributes
Object range3 = Ranges.integerRange(-1, BoundType.CLOSED, 2,
BoundType.OPEN, 1);
assertFalse("Invalid equals after changing attributes",
range.equals(range3));
Object range4 = Ranges.integerRange(-2, BoundType.OPEN, 2, BoundType.OPEN,
1);
assertFalse("Invalid equals after changing attributes",
range.equals(range4));
Object range5 = Ranges.integerRange(-2, BoundType.CLOSED, 1,
BoundType.OPEN, 1);
assertFalse("Invalid equals after changing attributes",
range.equals(range5));
Object range6 = Ranges.integerRange(-2, BoundType.CLOSED, 2,
BoundType.CLOSED, 1);
assertFalse("Invalid equals after changing attributes",
range.equals(range6));
Object range7 = Ranges.integerRange(-2, BoundType.CLOSED, 2,
BoundType.OPEN, 2);
assertFalse("Invalid equals after changing attributes",
range.equals(range7));
// Using different constructors
IntegerRange range8 = Ranges.integerRange(Long.valueOf(-2),
Long.valueOf(2), Long.valueOf(1));
assertEquals("Invalid equals using different constructor", range,
range8);
IntegerRange range9 = Ranges.integerRange(Long.valueOf(-2),
Long.valueOf(2));
assertEquals("Invalid equals using different constructor", range,
range9);
Endpoint<Integer> leftEndpoint = new Endpoint<Integer>(-2,
BoundType.CLOSED);
Endpoint<Integer> rightEndpoint = new Endpoint<Integer>(2,
BoundType.OPEN);
IntegerRange range10 = Ranges.integerRange(leftEndpoint, rightEndpoint, 1);
assertEquals("Invalid equals using different constructor", range,
range10);
}
@Test
public void testToString() {
IntegerRange range = Ranges.integerRange(-2, BoundType.OPEN, 2,
BoundType.CLOSED, 1);
assertEquals("Wrong string value", "IntegerRange<(-2, 2], 1>",
range.toString());
}
@Test
public void testConstructorUsingSameEndpoint() {
Endpoint<Integer> uniqueEndpoint = new Endpoint<Integer>(
10,
BoundType.CLOSED);
try {
Ranges.integerRange(uniqueEndpoint, uniqueEndpoint, 1);
} catch (IllegalArgumentException e) {
fail("Not expected to get here");
}
}
@Test
public void testInvalidRange() {
try {
Ranges.integerRange(10, BoundType.OPEN, -5, BoundType.CLOSED, 10);
fail("Not expected to get here");
} catch (IllegalArgumentException e) {
// Do nothing
}
Endpoint<Integer> leftEndpoint = new Endpoint<Integer>(10,
BoundType.CLOSED);
Endpoint<Integer> rightEndpoint = new Endpoint<Integer>(-5,
BoundType.OPEN);
try {
Ranges.integerRange(leftEndpoint, rightEndpoint, 1);
fail("Not expected to get here");
} catch (IllegalArgumentException e) {
// Do nothing
}
}
@Test
public void testDefaultStep() {
assertEquals("Invalid default step", Integer.valueOf(-1),
IntegerRange.DEFAULT_STEP.evaluate(10, 1));
assertEquals("Invalid default step", Integer.valueOf(1),
IntegerRange.DEFAULT_STEP.evaluate(1, 10));
}
}