blob: 9e65eae0a130ba92bb32765ef52003d1cb7f0037 [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.0f
* (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.0f
*
* 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;
/**
* Tests for float range.
*
* @since 1.0
* @version $Revision: $ $Date: $
*/
public class TestFloatRange extends BaseFunctorTest {
// A base range with all longs between -6 and 6
private final List<Float> fullRange = Collections.unmodifiableList(Arrays
.asList(-6.0f, -5.0f, -4.0f, -3.0f, -2.0f, -1.0f, 0.0f, 1.0f, 2.0f,
3.0f, 4.0f, 5.0f, 6.0f));
// Attributes
// ------------------------------------------------------------------------
private FloatRange ascFloatRange = null;
private FloatRange descFloatRange = null;
private Collection<Float> expectedAsc = null;
private Collection<Float> expectedDesc = null;
// Test set up
// ------------------------------------------------------------------------
@Before
public void setUp() {
ascFloatRange = Ranges.floatRange(0.0f, 10.0f);
descFloatRange = Ranges.floatRange(10.0f, 0.0f);
expectedAsc = Arrays.asList(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
7.0f, 8.0f, 9.0f);
expectedDesc = Arrays.asList(10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f,
3.0f, 2.0f, 1.0f);
}
@After
public void tearDown() {
ascFloatRange = null;
descFloatRange = null;
}
@Override
protected Object makeFunctor()
throws Exception {
return Ranges.floatRange(10, 20);
}
// Generator tests
// ---------------------------------------------------------------
@Test
public void testGenerateListExample() {
// generates a collection of Floats from 0 (inclusive) to 10 (exclusive)
{
List<? super Float> list = (List<? super Float>) (
IteratorToGeneratorAdapter.adapt(Ranges.floatRange(0, 10))
.to(new ArrayList<Float>()));
for (int i = 0; i < 10; i++) {
assertEquals(Float.valueOf(i), list.get(i));
}
}
// generates a collection of Floats from 10 (inclusive) to 0 (exclusive)
{
List<? super Float> list = (List<? super Float>) (
IteratorToGeneratorAdapter.adapt(Ranges.floatRange(10, 0))
.to(new ArrayList<Float>()));
for (int i = 10; i > 0; i--) {
assertEquals(Float.valueOf(i), list.get(10 - i));
}
}
}
@Test
public void testStepChecking() {
{
Ranges.floatRange(2, 2, 0); // step of 0 is ok when range is empty
}
{
Ranges.floatRange(2, 2, 1); // positive step is ok when range is
// empty
}
{
Ranges.floatRange(2, 2, -1); // negative step is ok when range is
// empty
}
{
Ranges.floatRange(0, 1, 10); // big steps are ok
}
{
Ranges.floatRange(1, 0, -10); // big steps are ok
}
try {
Ranges.floatRange(0, 1, 0);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
try {
Ranges.floatRange(0, 1, -1);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
try {
Ranges.floatRange(0, -1, 1);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
}
@Test
public void testObjectConstructor() {
FloatRange range = Ranges.floatRange(Float.valueOf(0), Float.valueOf(5));
assertEquals("[0.0, 1.0, 2.0, 3.0, 4.0]", IteratorToGeneratorAdapter.adapt(range).toCollection()
.toString());
range = Ranges.floatRange(Float.valueOf(0), Float.valueOf(5), Float.valueOf(1));
assertEquals("[0.0, 1.0, 2.0, 3.0, 4.0]", IteratorToGeneratorAdapter.adapt(range).toCollection()
.toString());
}
@Test
public void testReverseStep() {
FloatRange range = Ranges.floatRange(10, 0, -2);
assertEquals("[10.0, 8.0, 6.0, 4.0, 2.0]", IteratorToGeneratorAdapter.adapt(range).toCollection()
.toString());
}
@Test
public void testStep() {
FloatRange range = Ranges.floatRange(0, 10, 2);
assertEquals("[0.0, 2.0, 4.0, 6.0, 8.0]", IteratorToGeneratorAdapter.adapt(range).toCollection()
.toString());
}
@Test
public void testForwardRange() {
FloatRange range = Ranges.floatRange(0, 5);
assertEquals("[0.0, 1.0, 2.0, 3.0, 4.0]", IteratorToGeneratorAdapter.adapt(range).toCollection()
.toString());
}
@Test
public void testReverseRange() {
FloatRange range = Ranges.floatRange(5, 0);
assertEquals("[5.0, 4.0, 3.0, 2.0, 1.0]", IteratorToGeneratorAdapter.adapt(range).toCollection()
.toString());
}
@Test
public void testClosedClosedAscending() {
// [-5.0f, 5.0f], 3.0f = -5.0f, -2.0f, 1.0f, 4.0f
FloatRange range = Ranges.floatRange(-5.0f, BoundType.CLOSED, 5.0f,
BoundType.CLOSED, 3.0f);
// [-5.0f, 5.0f], 3.0f = -5.0f, -2.0f, 1.0f, 4.0f
List<Float> expected = Arrays.asList(-5.0f, -2.0f, 1.0f, 4.0f);
Collection<Float> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testOpenClosedAscending() {
// (-5.0f, 5.0f], 3.0f = -2.0f, 1.0f, 4.0f
FloatRange range = Ranges.floatRange(-5.0f, BoundType.OPEN, 5.0f,
BoundType.CLOSED, 3.0f);
// (-5.0f, 5.0f], 3.0f = -2.0f, 1.0f, 4.0f
List<Float> expected = Arrays.asList(-2.0f, 1.0f, 4.0f);
Collection<Float> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testClosedOpenAscending() {
// [-5.0f, 5.0f), 3.0f = -5.0f, -2.0f, 1.0f, 4.0f
FloatRange range = Ranges.floatRange(-5.0f, BoundType.CLOSED, 5.0f,
BoundType.OPEN, 3.0f);
// (-5.0f, 5.0f], 3.0f = -5.0f, -2.0f, 1.0f, 4.0f
List<Float> expected = Arrays.asList(-5.0f, -2.0f, 1.0f, 4.0f);
Collection<Float> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testOpenOpenAscending() {
// (-5.0f, 5.0f), 3.0f = -2.0f, 1.0f, 4.0f
FloatRange range = Ranges.floatRange(-5.0f, BoundType.OPEN, 5.0f,
BoundType.OPEN, 3.0f);
// (-5.0f, 5.0f), 3.0f = -2.0f, 1.0f, 4.0f
List<Float> expected = Arrays.asList(-2.0f, 1.0f, 4.0f);
Collection<Float> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testSingleStepAscending() {
// (-2.0f, 2.0f], 1.0f = -1.0f, 0.0f, 1.0f, 2.0f
FloatRange range = Ranges.floatRange(-2.0f, BoundType.OPEN, 2.0f,
BoundType.CLOSED, 1.0f);
// (-2.0f, 2.0f], 1.0f = -1.0f, 0.0f, 1.0f, 2.0f
List<Float> expected = Arrays.asList(-1.0f, 0.0f, 1.0f, 2.0f);
Collection<Float> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testClosedClosedDescending() {
// [5.0f, -5.0f], -3.0f = 5.0f, 2.0f, -1.0f, -4.0f
FloatRange range = Ranges.floatRange(5.0f, BoundType.CLOSED, -5.0f,
BoundType.CLOSED, -3.0f);
// [5.0f, -5.0f], -3.0f = 5.0f, 2.0f, -1.0f, -4.0f
List<Float> expected = Arrays.asList(5.0f, 2.0f, -1.0f, -4.0f);
Collection<Float> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testOpenClosedDescending() {
// (5.0f, -5.0f], -3.0f = 2.0f, -1.0f, -4.0f
FloatRange range = Ranges.floatRange(5.0f, BoundType.OPEN, -5.0f,
BoundType.CLOSED, -3.0f);
// (5.0f, -5.0f], -3.0f = 2.0f, -1.0f, -4.0f
List<Float> expected = Arrays.asList(2.0f, -1.0f, -4.0f);
Collection<Float> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testClosedOpenDescending() {
// [5.0f, -5.0f), -3.0f = 5.0f, 2.0f, -1.0f, -4.0f
FloatRange range = Ranges.floatRange(5.0f, BoundType.CLOSED, -5.0f,
BoundType.OPEN, -3.0f);
// [5.0f, -5.0f), -3.0f = 5.0f, 2.0f, -1.0f, -4.0f
List<Float> expected = Arrays.asList(5.0f, 2.0f, -1.0f, -4.0f);
Collection<Float> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testOpenOpenDescending() {
// (5.0f, -5.0f), -3.0f = 2.0f, -1.0f, -4.0f
FloatRange range = Ranges.floatRange(5.0f, BoundType.OPEN, -5.0f,
BoundType.OPEN, -3.0f);
// (5.0f, -5.0f), -3.0f = 2.0f, -1.0f, -4.0f
List<Float> expected = Arrays.asList(2.0f, -1.0f, -4.0f);
Collection<Float> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testSingleStepDescending() {
// [2.0f, -2.0f), -1.0f = 2.0f, 1.0f, 0.0f, -1.0f
FloatRange range = Ranges.floatRange(2.0f, BoundType.CLOSED, -2.0f,
BoundType.OPEN, -1.0f);
// [2.0f, -2.0f), -1.0f = 2.0f, 1.0f, 0.0f, -1.0f
List<Float> expected = Arrays.asList(2.0f, 1.0f, 0.0f, -1.0f);
Collection<Float> elements = IteratorToGeneratorAdapter.adapt(range).toCollection();
assertEquals(expected, elements);
}
@Test
public void testAscending() {
final List<Float> list = new ArrayList<Float>();
for (float f : ascFloatRange) {
list.add(f);
}
assertTrue(expectedAsc.containsAll(list));
}
@Test
public void testDescending() {
final List<Float> list = new ArrayList<Float>();
for (float f : descFloatRange) {
list.add(f);
}
assertTrue(expectedDesc.containsAll(list));
}
@Test
public void testToCollection() {
Collection<Float> ascCol = IteratorToGeneratorAdapter.adapt(ascFloatRange).toCollection();
assertEquals("Different collections", expectedAsc, ascCol);
Collection<Float> descCol = IteratorToGeneratorAdapter.adapt(descFloatRange).toCollection();
assertEquals("Different collections", expectedDesc, descCol);
}
@Test
public void testTransformedGenerator() {
Float expected = 45.0f;
Float total = IteratorToGeneratorAdapter.adapt(ascFloatRange)
.to(new Function<Generator<? extends Float>, Float>() {
public Float evaluate(Generator<? extends Float> obj) {
Float total = 0.0f;
for (Object element : obj.toCollection()) {
total += (Float) element;
}
return total;
}
});
assertEquals(expected, total);
expected = 55.0f;
total = IteratorToGeneratorAdapter.adapt(descFloatRange)
.to(new Function<Generator<? extends Float>, Float>() {
public Float evaluate(Generator<? extends Float> obj) {
Float total = 0.0f;
for (Object element : obj.toCollection()) {
total += (Float) element;
}
return total;
}
});
assertEquals(expected, total);
}
// Range tests
// ---------------------------------------------------------------
@Test
public void testEmptyRanges() {
FloatRange empty1 = Ranges.floatRange(-2, BoundType.OPEN, -1,
BoundType.OPEN, 2);
assertTrue("The range was expected to be empty.", empty1.isEmpty());
FloatRange empty2 = Ranges.floatRange(2, BoundType.OPEN, 0,
BoundType.OPEN, -2);
assertTrue("The range was expected to be empty.", empty2.isEmpty());
FloatRange empty3 = Ranges.floatRange(0, BoundType.OPEN, 1,
BoundType.CLOSED, 2);
assertTrue("The range was expected to be empty.", empty3.isEmpty());
FloatRange empty4 = Ranges.floatRange(-3, BoundType.OPEN, -3,
BoundType.OPEN, 1);
assertTrue("The range was expected to be empty.", empty4.isEmpty());
FloatRange empty5 = Ranges.floatRange(-3, BoundType.CLOSED, -3,
BoundType.OPEN, 1);
assertTrue("The range was expected to be empty.", empty5.isEmpty());
FloatRange empty6 = Ranges.floatRange(1, BoundType.OPEN, 0,
BoundType.CLOSED, -2);
assertTrue("The range was expected to be empty.", empty6.isEmpty());
FloatRange notEmpty1 = Ranges.floatRange(-3, BoundType.CLOSED, -3,
BoundType.CLOSED, 1);
assertFalse("The range was not expected to be empty.",
notEmpty1.isEmpty());
FloatRange notEmpty2 = Ranges.floatRange(-3, BoundType.OPEN, -2,
BoundType.CLOSED, 1);
assertFalse("The range was not expected to be empty.",
notEmpty2.isEmpty());
FloatRange notEmpty3 = Ranges.floatRange(2, BoundType.OPEN, 1,
BoundType.CLOSED, -1);
assertFalse("The range was not expected to be empty.",
notEmpty3.isEmpty());
FloatRange notEmpty4 = Ranges.floatRange(2, BoundType.CLOSED, 1,
BoundType.OPEN, -1);
assertFalse("The range was not expected to be empty.",
notEmpty4.isEmpty());
FloatRange notEmpty5 = Ranges.floatRange(1, BoundType.CLOSED, 2,
BoundType.OPEN, 1);
assertFalse("The range was not expected to be empty.",
notEmpty5.isEmpty());
}
@Test
public void testBoundaries() {
FloatRange range = Ranges.floatRange(0.0f, 10.0f);
assertEquals(new Endpoint<Comparable<?>>(0.0f, BoundType.CLOSED),
range.getLeftEndpoint());
assertEquals(new Endpoint<Comparable<?>>(10.0f, BoundType.OPEN),
range.getRightEndpoint());
}
@Test
public void testClosedClosedAscendingContains() {
// [-5, 5], 3 = -5, -2, 1, 4
FloatRange range = Ranges.floatRange(-5, BoundType.CLOSED, 5,
BoundType.CLOSED, 3);
// [-5, 5], 3 = -5, -2, 1, 4
List<Float> arr = Arrays.asList(-5.0f, -2.0f, 1.0f, 4.0f);
for (Float element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Float> elementsNotPresent = new ArrayList<Float>(fullRange);
elementsNotPresent.removeAll(arr);
for (Float element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testOpenClosedAscendingContains() {
// (-5, 5], 3 = -2, 1, 4
FloatRange range = Ranges.floatRange(-5, BoundType.OPEN, 5,
BoundType.CLOSED, 3);
// (-5, 5], 3 = -2, 1, 4
List<Float> arr = Arrays.asList(-2.0f, 1.0f, 4.0f);
for (Float element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Float> elementsNotPresent = new ArrayList<Float>(fullRange);
elementsNotPresent.removeAll(arr);
for (Float 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
FloatRange range = Ranges.floatRange(-5, BoundType.CLOSED, 5,
BoundType.OPEN, 3);
// (-5, 5], 3 = -5, -2, 1, 4
List<Float> arr = Arrays.asList(-5.0f, -2.0f, 1.0f, 4.0f);
for (Float element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Float> elementsNotPresent = new ArrayList<Float>(fullRange);
elementsNotPresent.removeAll(arr);
for (Float element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testOpenOpenAscendingContains() {
// (-5, 5), 3 = -2, 1, 4
FloatRange range = Ranges.floatRange(-5, BoundType.OPEN, 5,
BoundType.OPEN, 3);
// (-5, 5), 3 = -2, 1, 4
List<Float> arr = Arrays.asList(-2.0f, 1.0f, 4.0f);
for (Float element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Float> elementsNotPresent = new ArrayList<Float>(fullRange);
elementsNotPresent.removeAll(arr);
for (Float 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
FloatRange ascendingRange = Ranges.floatRange(-2, BoundType.OPEN, 2,
BoundType.CLOSED, 1);
// (-2, 2], 1 = -1, 0, 1, 2
List<Float> arr = Arrays.asList(-1.0f, 0.0f, 1.0f, 2.0f);
for (Float element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + ascendingRange + "]",
ascendingRange.contains(element));
}
List<Float> elementsNotPresent = new ArrayList<Float>(fullRange);
elementsNotPresent.removeAll(arr);
for (Float 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
FloatRange range = Ranges.floatRange(5, BoundType.CLOSED, -5,
BoundType.CLOSED, -3);
// [5, -5], -3 = 5, 2, -1, -4
List<Float> arr = Arrays.asList(5.0f, 2.0f, -1.0f, -4.0f);
for (Float element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Float> elementsNotPresent = new ArrayList<Float>(fullRange);
elementsNotPresent.removeAll(arr);
for (Float element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testOpenClosedDescendingContains() {
// (5, -5], -3 = 2, -1, -4
FloatRange range = Ranges.floatRange(5, BoundType.OPEN, -5,
BoundType.CLOSED, -3);
// (5, -5], -3 = 2, -1, -4
List<Float> arr = Arrays.asList(2.0f, -1.0f, -4.0f);
for (Float element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Float> elementsNotPresent = new ArrayList<Float>(fullRange);
elementsNotPresent.removeAll(arr);
for (Float 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
FloatRange range = Ranges.floatRange(5, BoundType.CLOSED, -5,
BoundType.OPEN, -3);
// [5, -5), -3 = 5, 2, -1, -4
List<Float> arr = Arrays.asList(5.0f, 2.0f, -1.0f, -4.0f);
for (Float element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Float> elementsNotPresent = new ArrayList<Float>(fullRange);
elementsNotPresent.removeAll(arr);
for (Float element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + range + "]",
range.contains(element));
}
}
@Test
public void testOpenOpenDescendingContains() {
// (5, -5), -3 = 2, -1, -4
FloatRange range = Ranges.floatRange(5, BoundType.OPEN, -5,
BoundType.OPEN, -3);
// (5, -5), -3 = 2, -1, -4
List<Float> arr = Arrays.asList(2.0f, -1.0f, -4.0f);
for (Float element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + range + "]",
range.contains(element));
}
List<Float> elementsNotPresent = new ArrayList<Float>(fullRange);
elementsNotPresent.removeAll(arr);
for (Float 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
FloatRange descendingRange = Ranges.floatRange(2, BoundType.CLOSED, -2,
BoundType.OPEN, -1);
// [2, -2), -1 = 2, 1, 0, -1
List<Float> arr = Arrays.asList(2.0f, 1.0f, 0.0f, -1.0f);
for (Float element : arr) {
assertTrue("Expected element [" + element +
"] is missing in range [" + descendingRange +
"]",
descendingRange.contains(element));
}
List<Float> elementsNotPresent = new ArrayList<Float>(fullRange);
elementsNotPresent.removeAll(arr);
for (Float element : elementsNotPresent) {
assertFalse("Unexpected element [" + element +
"] is present in range [" + descendingRange +
"]",
descendingRange.contains(element));
}
}
@Test
public void testContainsNullOrEmpty() {
FloatRange range = Ranges.floatRange(-2, BoundType.OPEN, 2,
BoundType.CLOSED, 1);
assertFalse(range.contains(null));
}
@SuppressWarnings("unchecked")
@Test
public void testContainsAll() {
// (-2, 2], 1 = -1, 0, 1, 2
FloatRange range = Ranges.floatRange(-2, BoundType.OPEN, 2,
BoundType.CLOSED, 1);
List<Float> list = Arrays.asList(-1.0f, 0.0f, 1.0f, 2.0f);
assertTrue("Range [" + range +
"] was expected to contain all elements from list [" + list +
"]", range.containsAll(list));
List<Float> listWithExtraElements = Arrays.asList(2.0f, -1.0f, 0.0f,
1.0f, 2.0f, 3.0f);
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
FloatRange range = Ranges.floatRange(-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.floatRange(-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.floatRange(-1, BoundType.CLOSED, 2, BoundType.OPEN,
1);
assertFalse("Invalid equals after changing attributes",
range.equals(range3));
Object range4 = Ranges.floatRange(-2, BoundType.OPEN, 2, BoundType.OPEN, 1);
assertFalse("Invalid equals after changing attributes",
range.equals(range4));
Object range5 = Ranges.floatRange(-2, BoundType.CLOSED, 1, BoundType.OPEN,
1);
assertFalse("Invalid equals after changing attributes",
range.equals(range5));
Object range6 = Ranges.floatRange(-2, BoundType.CLOSED, 2,
BoundType.CLOSED, 1);
assertFalse("Invalid equals after changing attributes",
range.equals(range6));
Object range7 = Ranges.floatRange(-2, BoundType.CLOSED, 2, BoundType.OPEN,
2);
assertFalse("Invalid equals after changing attributes",
range.equals(range7));
// Using different constructors
FloatRange range8 = Ranges.floatRange(Long.valueOf(-2), Long.valueOf(2),
Long.valueOf(1));
assertEquals("Invalid equals using different constructor", range,
range8);
FloatRange range9 = Ranges.floatRange(Long.valueOf(-2), Long.valueOf(2));
assertEquals("Invalid equals using different constructor", range,
range9);
Endpoint<Float> leftEndpoint = new Endpoint<Float>(-2.0f,
BoundType.CLOSED);
Endpoint<Float> rightEndpoint = new Endpoint<Float>(2.0f,
BoundType.OPEN);
FloatRange range10 = Ranges.floatRange(leftEndpoint, rightEndpoint, 1.0f);
assertEquals("Invalid equals using different constructor", range,
range10);
}
@Test
public void testToString() {
FloatRange range = Ranges.floatRange(-2, BoundType.OPEN, 2,
BoundType.CLOSED, 1);
assertEquals("Wrong string value", "FloatRange<(-2.0, 2.0], 1.0>",
range.toString());
}
@Test
public void testConstructorUsingSameEndpoint() {
Endpoint<Float> uniqueEndpoint = new Endpoint<Float>(10.0f,
BoundType.CLOSED);
try {
Ranges.floatRange(uniqueEndpoint, uniqueEndpoint, 1.0f);
} catch (IllegalArgumentException e) {
fail("Not expected to get here");
}
}
@Test
public void testInvalidRange() {
try {
Ranges.floatRange(10.0f, BoundType.OPEN, -5.0f, BoundType.CLOSED,
10.0f);
fail("Not expected to get here");
} catch (IllegalArgumentException e) {
// Do nothing
}
Endpoint<Float> leftEndpoint = new Endpoint<Float>(10.0f,
BoundType.CLOSED);
Endpoint<Float> rightEndpoint = new Endpoint<Float>(-5.0f,
BoundType.OPEN);
try {
Ranges.floatRange(leftEndpoint, rightEndpoint, 1.0f);
fail("Not expected to get here");
} catch (IllegalArgumentException e) {
// Do nothing
}
}
@Test
public void testDefaultStep() {
assertEquals("Invalid default step", Float.valueOf(-1.0f),
FloatRange.DEFAULT_STEP.evaluate(10.0f, 1.0f));
assertEquals("Invalid default step", Float.valueOf(1.0f),
FloatRange.DEFAULT_STEP.evaluate(1.0f, 10.0f));
}
}