blob: ce324e3e340266c2ec241a94899a2d01230eb8cc [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: $ $Date: $
*/
public class TestCharacterRange extends BaseFunctorTest {
// A base range with all chars between a and m
private final List<Character> fullRange = Collections.unmodifiableList(Arrays.asList('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'));
// Attributes
// ------------------------------------------------------------------------
private CharacterRange ascCharRange = null;
private CharacterRange descCharRange = null;
private Collection<Character> expectedAsc = null;
private Collection<Character> expectedDesc = null;
// Test set up
// ------------------------------------------------------------------------
@Before
public void setUp() {
ascCharRange = Ranges.characterRange('b', 'k');
descCharRange = Ranges.characterRange('k', 'b');
expectedAsc = Arrays.asList('b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k');
expectedDesc = Arrays.asList('k', 'j', 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b');
}
@After
public void tearDown() {
ascCharRange = null;
descCharRange = null;
}
@Override
protected Object makeFunctor()
throws Exception {
return Ranges.characterRange('b', 'k');
}
// Generator tests
// ---------------------------------------------------------------
@Test
public void testStepChecking() {
{
Ranges.characterRange('b', 'b', 0); // step of 0 is ok when range is
// empty
}
{
Ranges.characterRange('b', 'b', 1); // positive step is ok when range
// is empty
}
{
Ranges.characterRange('b', 'b', -1); // negative step is ok when range
// is empty
}
{
Ranges.characterRange('a', 'b', 10); // big steps are ok
}
{
Ranges.characterRange('b', 'a', -10); // big steps are ok
}
try {
Ranges.characterRange('a', 'b', 0);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
try {
Ranges.characterRange('a', 'b', -1);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
try {
Ranges.characterRange('b', 'a', 1);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
}
@Test
public void testObjectConstructor() {
CharacterRange range = Ranges.characterRange(Character.valueOf('a'),
Character.valueOf('e'));
assertEquals("[a, b, c, d, e]", IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
range = Ranges.characterRange(Character.valueOf('a'), Character.valueOf('e'),
Integer.valueOf(1));
assertEquals("[a, b, c, d, e]", IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
}
@Test
public void testReverseStep() {
CharacterRange range = Ranges.characterRange('k', 'a', -2);
assertEquals("[k, i, g, e, c, a]", IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
}
@Test
public void testStep() {
CharacterRange range = Ranges.characterRange('a', 'k', 2);
assertEquals("[a, c, e, g, i, k]", IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
}
@Test
public void testForwardRange() {
CharacterRange range = Ranges.characterRange('a', 'e');
assertEquals("[a, b, c, d, e]", IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
}
@Test
public void testReverseRange() {
CharacterRange range = Ranges.characterRange('e', 'a');
assertEquals("[e, d, c, b, a]", IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
}
// @Test
// public void testEdgeCase() {
// CharacterRange range = Ranges.characterRange(Character.MAX_VALUE-3,
// Character.MAX_VALUE);
// assertEquals("[2147483644, 2147483645, 2147483646]",
// IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
// assertEquals("[2147483644, 2147483645, 2147483646]",
// IteratorToGeneratorAdapter.adapt(range).toCollection().toString());
// }
@Test
public void testBoundaries() {
CharacterRange range = Ranges.characterRange('b', 'l');
assertEquals(new Endpoint<Comparable<?>>('b', BoundType.CLOSED),
range.getLeftEndpoint());
assertEquals(new Endpoint<Comparable<?>>('l', BoundType.CLOSED),
range.getRightEndpoint());
}
@Test
public void testClosedClosedAscending() {
// [b, l], 3 = b, e, h, k
CharacterRange range = Ranges.characterRange('b', BoundType.CLOSED, 'l', BoundType.CLOSED, 3);
// [b, l], 3 = b, e, h, k
List<Character> expected = Arrays.asList('b', 'e', 'h', 'k');
Collection<Character> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testOpenClosedAscending() {
// (b, l], 3 = e, h, k
CharacterRange range = Ranges.characterRange('b', BoundType.OPEN, 'l', BoundType.CLOSED, 3);
// (b, l], 3 = e, h, k
List<Character> expected = Arrays.asList('e', 'h', 'k');
Collection<Character> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testClosedOpenAscending() {
// [b, l), 3 = b, e, h, k
CharacterRange range = Ranges.characterRange('b', BoundType.CLOSED, 'l', BoundType.OPEN, 3);
// [b, l), 3 = b, e, h, k
List<Character> expected = Arrays.asList('b', 'e', 'h', 'k');
Collection<Character> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testOpenOpenAscending() {
// (b, l), 3 = e, h, k
CharacterRange range = Ranges.characterRange('b', BoundType.OPEN, 'l', BoundType.OPEN, 3);
// (b, l), 3 = e, h, k
List<Character> expected = Arrays.asList('e', 'h', 'k');
Collection<Character> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testSingleStepAscending() {
// (d, h], 1 = e, f, g, h
CharacterRange range = Ranges.characterRange('d', BoundType.OPEN, 'h', BoundType.CLOSED, 1);
// (d, h], 1 = e, f, g, h
List<Character> expected = Arrays.asList('e', 'f', 'g', 'h');
Collection<Character> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testClosedClosedDescending() {
// [l, b], -3 = l, i, f, c
CharacterRange range = Ranges.characterRange('l', BoundType.CLOSED, 'b',
BoundType.CLOSED, -3);
// [l, b], -3 = l, i, f, c
List<Character> expected = Arrays.asList('l', 'i', 'f', 'c');
Collection<Character> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testOpenClosedDescending() {
// (l, b], -3 = i, f, c
CharacterRange range = Ranges.characterRange('l', BoundType.OPEN, 'b',
BoundType.CLOSED, -3);
// (l, b], -3 = i, f, c
List<Character> expected = Arrays.asList('i', 'f', 'c');
Collection<Character> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testClosedOpenDescending() {
// [l, b), -3 = l, i, f, c
CharacterRange range = Ranges.characterRange('l', BoundType.CLOSED, 'b',
BoundType.OPEN, -3);
// [l, b), -3 = l, i, f, c
List<Character> expected = Arrays.asList('l', 'i', 'f', 'c');
Collection<Character> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testOpenOpenDescending() {
// (l, b), -3 = i, f, c
CharacterRange range = Ranges.characterRange('l', BoundType.OPEN, 'b',
BoundType.OPEN, -3);
// (l, b), -3 = i, f, c
List<Character> expected = Arrays.asList('i', 'f', 'c');
Collection<Character> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testSingleStepDescending() {
// [h, d), -1 = h, g, f
CharacterRange range = Ranges.characterRange('h', BoundType.CLOSED, 'e',
BoundType.OPEN, -1);
// [h, d), -1 = h, g, f
List<Character> expected = Arrays.asList('h', 'g', 'f');
Collection<Character> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testAscending() {
final List<Character> list = new ArrayList<Character>();
for (char c : ascCharRange) {
list.add(c);
}
assertTrue(expectedAsc.containsAll(list));
}
@Test
public void testDescending() {
final List<Character> list = new ArrayList<Character>();
for (char c : ascCharRange) {
list.add(c);
}
assertTrue(expectedDesc.containsAll(list));
}
@Test
public void testToCollection() {
Collection<Character> ascCol = IteratorToGeneratorAdapter.adapt(ascCharRange).toCollection();
assertEquals("Different collections", expectedAsc, ascCol);
Collection<Character> descCol = IteratorToGeneratorAdapter.adapt(descCharRange).toCollection();
assertEquals("Different collections", expectedDesc, descCol);
}
@Test
public void testTransformedGenerator() {
int expected = 10;
List<Character> list = IteratorToGeneratorAdapter.adapt(ascCharRange)
.to(new Function<Generator<? extends Character>, List<Character>>() {
public List<Character> evaluate(Generator<? extends Character> obj) {
List<Character> chars = new ArrayList<Character>();
for (Object element : obj.toCollection()) {
chars.add((Character) element);
}
return chars;
}
});
assertEquals(expected, list.size());
expected = 10;
list = IteratorToGeneratorAdapter.adapt(descCharRange)
.to(new Function<Generator<? extends Character>, List<Character>>() {
public List<Character> evaluate(Generator<? extends Character> obj) {
List<Character> chars = new ArrayList<Character>();
for (Object element : obj.toCollection()) {
chars.add((Character) element);
}
return chars;
}
});
assertEquals(expected, list.size());
}
// Range tests
// ---------------------------------------------------------------
@Test
public void testEmptyRanges() {
CharacterRange empty1 = Ranges.characterRange('a', BoundType.OPEN, 'b',
BoundType.OPEN, 2);
assertTrue("The range was expected to be empty.", empty1.isEmpty());
CharacterRange empty2 = Ranges.characterRange('c', BoundType.OPEN, 'a',
BoundType.OPEN, -2);
assertTrue("The range was expected to be empty.", empty2.isEmpty());
CharacterRange empty3 = Ranges.characterRange('a', BoundType.OPEN, 'b',
BoundType.CLOSED, 2);
assertTrue("The range was expected to be empty.", empty3.isEmpty());
CharacterRange empty4 = Ranges.characterRange('a', BoundType.OPEN, 'a',
BoundType.OPEN, 1);
assertTrue("The range was expected to be empty.", empty4.isEmpty());
CharacterRange empty5 = Ranges.characterRange('b', BoundType.CLOSED, 'b',
BoundType.OPEN, 1);
assertTrue("The range was expected to be empty.", empty5.isEmpty());
CharacterRange empty6 = Ranges.characterRange('d', BoundType.OPEN, 'c',
BoundType.CLOSED, -2);
assertTrue("The range was expected to be empty.", empty6.isEmpty());
CharacterRange notEmpty1 = Ranges.characterRange('a', BoundType.CLOSED,
'a', BoundType.CLOSED, 1);
assertFalse("The range was not expected to be empty.",
notEmpty1.isEmpty());
CharacterRange notEmpty2 = Ranges.characterRange('a', BoundType.OPEN, 'b',
BoundType.CLOSED, 1);
assertFalse("The range was not expected to be empty.",
notEmpty2.isEmpty());
CharacterRange notEmpty3 = Ranges.characterRange('b', BoundType.OPEN, 'a',
BoundType.CLOSED, -1);
assertFalse("The range was not expected to be empty.",
notEmpty3.isEmpty());
CharacterRange notEmpty4 = Ranges.characterRange('b', BoundType.CLOSED,
'a', BoundType.OPEN, -1);
assertFalse("The range was not expected to be empty.",
notEmpty4.isEmpty());
CharacterRange notEmpty5 = Ranges.characterRange('a', BoundType.CLOSED,
'b', BoundType.OPEN, 1);
assertFalse("The range was not expected to be empty.",
notEmpty5.isEmpty());
}
@Test
public void testClosedClosedAscendingContains() {
// [b, l], 3 = 'b', 'e', 'h', 'k'
CharacterRange range = Ranges.characterRange('b', BoundType.CLOSED, 'l',
BoundType.CLOSED, 3);
// [b, l], 3 = 'b', 'e', 'h', 'k'
List<Character> arr = Arrays.asList('b', 'e', 'h', 'k');
for (Character element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Character> elementsNotPresent = new ArrayList<Character>(fullRange);
elementsNotPresent.removeAll(arr);
for (Character element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testOpenClosedAscendingContains() {
// (b, l], 3 = 'e', 'h', 'k'
CharacterRange range = Ranges.characterRange('b', BoundType.OPEN, 'l',
BoundType.CLOSED, 3);
// (b, l], 3 = 'e', 'h', 'k'
List<Character> arr = Arrays.asList('e', 'h', 'k');
for (Character element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Character> elementsNotPresent = new ArrayList<Character>(fullRange);
elementsNotPresent.removeAll(arr);
for (Character element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testClosedOpenAscendingContains() {
// [b, l), 3 = 'b', 'e', 'h', 'k'
CharacterRange range = Ranges.characterRange('b', BoundType.CLOSED, 'l',
BoundType.OPEN, 3);
// [b, l), 3 = 'b', 'e', 'h', 'k'
List<Character> arr = Arrays.asList('b', 'e', 'h', 'k');
for (Character element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Character> elementsNotPresent = new ArrayList<Character>(fullRange);
elementsNotPresent.removeAll(arr);
for (Character element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testOpenOpenAscendingContains() {
// (b, l), 3 = 'e', 'h', 'k'
CharacterRange range = Ranges.characterRange('b', BoundType.OPEN, 'l',
BoundType.OPEN, 3);
// (b, l), 3 = 'e', 'h', 'k'
List<Character> arr = Arrays.asList('e', 'h', 'k');
for (Character element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Character> elementsNotPresent = new ArrayList<Character>(fullRange);
elementsNotPresent.removeAll(arr);
for (Character element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testContainsSingleStepAscending() {
// (b, l], 1 = 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'
CharacterRange ascendingRange = Ranges.characterRange('b', BoundType.OPEN,
'l',
BoundType.CLOSED, 1);
// (b, l], 1 = 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'
List<Character> arr = Arrays.asList('c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l');
for (Character element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + ascendingRange + "]",
ascendingRange.contains(element));
}
List<Character> elementsNotPresent = new ArrayList<Character>(fullRange);
elementsNotPresent.removeAll(arr);
for (Character element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + ascendingRange +
"]",
ascendingRange.contains(element));
}
}
@Test
public void testClosedClosedDescendingContains() {
// [l, b], -3 = 'l', 'i', 'f', 'c'
CharacterRange range = Ranges.characterRange('l', BoundType.CLOSED, 'b',
BoundType.CLOSED, -3);
// [l, b], -3 = 'l', 'i', 'f', 'c'
List<Character> arr = Arrays.asList('l', 'i', 'f', 'c');
for (Character element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Character> elementsNotPresent = new ArrayList<Character>(fullRange);
elementsNotPresent.removeAll(arr);
for (Character element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testOpenClosedDescendingContains() {
// (l, b], -3 = 'i', 'f', 'c'
CharacterRange range = Ranges.characterRange('l', BoundType.OPEN, 'b',
BoundType.CLOSED, -3);
// (l, b], -3 = 'i', 'f', 'c'
List<Character> arr = Arrays.asList('i', 'f', 'c');
for (Character element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Character> elementsNotPresent = new ArrayList<Character>(fullRange);
elementsNotPresent.removeAll(arr);
for (Character element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testClosedOpenDescendingContains() {
// [l, b), -3 = 'l', 'i', 'f', 'c'
CharacterRange range = Ranges.characterRange('l', BoundType.CLOSED, 'b',
BoundType.OPEN, -3);
// [l, b), -3 = 'l', 'i', 'f', 'c'
List<Character> arr = Arrays.asList('l', 'i', 'f', 'c');
for (Character element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Character> elementsNotPresent = new ArrayList<Character>(fullRange);
elementsNotPresent.removeAll(arr);
for (Character element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testOpenOpenDescendingContains() {
// (l, b), -3 = 'i', 'f', 'c'
CharacterRange range = Ranges.characterRange('l', BoundType.OPEN, 'b',
BoundType.OPEN, -3);
// (l, b), -3 = 'i', 'f', 'c'
List<Character> arr = Arrays.asList('i', 'f', 'c');
for (Character element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Character> elementsNotPresent = new ArrayList<Character>(fullRange);
elementsNotPresent.removeAll(arr);
for (Character element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testContainsSingleStepDescending() {
// [l, b), -1 = 'l', 'k', 'j', 'i', 'h', 'g', 'f', 'e', 'd', 'c'
CharacterRange descendingRange = Ranges.characterRange('l',
BoundType.CLOSED,
'b',
BoundType.OPEN, -1);
// [l, b), -1 = 'l', 'k', 'j', 'i', 'h', 'g', 'f', 'e', 'd', 'c'
List<Character> arr = Arrays.asList('l', 'k', 'j', 'i', 'h', 'g', 'f',
'e', 'd', 'c');
for (Character element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + descendingRange +
"]",
descendingRange.contains(element));
}
List<Character> elementsNotPresent = new ArrayList<Character>(fullRange);
elementsNotPresent.removeAll(arr);
for (Character element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + descendingRange +
"]",
descendingRange.contains(element));
}
}
@Test
public void testContainsNullOrEmpty() {
CharacterRange range = Ranges.characterRange('a', BoundType.OPEN, 'r',
BoundType.CLOSED, 1);
assertFalse(range.contains(null));
}
@SuppressWarnings("unchecked")
@Test
public void testContainsAll() {
// (c, g], 1 = d, e, f, g
CharacterRange range = Ranges.characterRange('c', BoundType.OPEN, 'g',
BoundType.CLOSED, 1);
List<Character> list = Arrays.asList('d', 'e', 'f', 'g');
assertTrue("Range [" + range +
"] was expected to contain all elements from list [" + list +
"]", range.containsAll(list));
List<Character> listWithExtraElements = Arrays.asList('a', 'd', 'e',
'f', 'g', 'z');
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
CharacterRange range = Ranges.characterRange('a', BoundType.CLOSED, 'e',
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.characterRange('a', BoundType.CLOSED, 'e',
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.characterRange('c', BoundType.CLOSED, 'e',
BoundType.OPEN, 1);
assertFalse("Invalid equals after changing attributes",
range.equals(range3));
Object range4 = Ranges.characterRange('a', BoundType.OPEN, 'e',
BoundType.OPEN, 1);
assertFalse("Invalid equals after changing attributes",
range.equals(range4));
Object range5 = Ranges.characterRange('a', BoundType.CLOSED, 'r',
BoundType.OPEN, 1);
assertFalse("Invalid equals after changing attributes",
range.equals(range5));
Object range6 = Ranges.characterRange('a', BoundType.CLOSED, 'e',
BoundType.CLOSED, 1);
assertFalse("Invalid equals after changing attributes",
range.equals(range6));
Object range7 = Ranges.characterRange('a', BoundType.CLOSED, 'e',
BoundType.OPEN, 2);
assertFalse("Invalid equals after changing attributes",
range.equals(range7));
// Using different constructors
Endpoint<Character> leftEndpoint = new Endpoint<Character>(
'a',
BoundType.CLOSED);
Endpoint<Character> rightEndpoint = new Endpoint<Character>(
'e',
BoundType.OPEN);
CharacterRange range8 = Ranges.characterRange(leftEndpoint, rightEndpoint,
1);
assertEquals("Invalid equals using different constructor", range,
range8);
}
@Test
public void testToString() {
CharacterRange range = Ranges.characterRange('a', BoundType.OPEN, 'b',
BoundType.CLOSED, 1);
assertEquals("Wrong string value", "CharacterRange<(a, b], 1>",
range.toString());
}
@Test
public void testConstructorUsingSameEndpoint() {
Endpoint<Character> uniqueEndpoint = new Endpoint<Character>(
'a',
BoundType.CLOSED);
try {
Ranges.characterRange(uniqueEndpoint, uniqueEndpoint, 1);
} catch (IllegalArgumentException e) {
fail("Not expected to get here");
}
}
@Test
public void testInvalidRange() {
try {
Ranges.characterRange('a', BoundType.OPEN, 'z', BoundType.CLOSED, -100);
fail("Not expected to get here");
} catch (IllegalArgumentException e) {
// Do nothing
}
Endpoint<Character> leftEndpoint = new Endpoint<Character>(
'a',
BoundType.CLOSED);
Endpoint<Character> rightEndpoint = new Endpoint<Character>(
'z',
BoundType.OPEN);
try {
Ranges.characterRange(leftEndpoint, rightEndpoint, -100);
fail("Not expected to get here");
} catch (IllegalArgumentException e) {
// Do nothing
}
}
@Test
public void testDefaultStep() {
assertEquals("Invalid default step", Integer.valueOf(-1),
CharacterRange.DEFAULT_STEP.evaluate('c', 'a'));
assertEquals("Invalid default step", Integer.valueOf(1),
CharacterRange.DEFAULT_STEP.evaluate('a', 'c'));
}
}