blob: cd027868a47cbb12dfafadde57e7c057fd01d5fc [file] [log] [blame]
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.commons.lang.math;
import junit.framework.TestCase;
/**
* Test cases for the {@link Range} classes.
*
* @author Stephen Colebourne
* @version $Id: AbstractRangeTest.java,v 1.3 2003/08/04 01:14:02 scolebourne Exp $
*/
public abstract class AbstractRangeTest extends TestCase {
protected Range tenToTwenty;
protected Range otherRange;
protected Integer five;
protected Integer ten;
protected Integer twelve;
protected Integer fifteen;
protected Integer twenty;
protected Integer twentyFive;
protected Long long8;
protected Long long10;
protected Long long12;
protected Long long20;
protected Long long21;
protected Double double8;
protected Double double10;
protected Double double12;
protected Double double20;
protected Double double21;
protected Float float8;
protected Float float10;
protected Float float12;
protected Float float20;
protected Float float21;
private static class InnerNumber extends Number {
public double doubleValue() {
return 12d;
}
public float floatValue() {
return 12f;
}
public int intValue() {
return 12;
}
public long longValue() {
return 12L;
}
}
protected InnerNumber nonComparable = new InnerNumber();
public AbstractRangeTest(String name) {
super(name);
}
public void setUp() {
five = new Integer(5);
ten = new Integer(10);
twelve = new Integer(12);
fifteen = new Integer(15);
twenty = new Integer(20);
twentyFive = new Integer(25);
long8 = new Long(8);
long10 = new Long(10);
long12 = new Long(12);
long20 = new Long(20);
long21 = new Long(21);
double8 = new Double(8);
double10 = new Double(10);
double12 = new Double(12);
double20 = new Double(20);
double21 = new Double(21);
float8 = new Float(8);
float10 = new Float(10);
float12 = new Float(12);
float20 = new Float(20);
float21 = new Float(21);
}
//--------------------------------------------------------------------------
public void testGetMinimum() {
assertEquals(10L, tenToTwenty.getMinimumLong());
assertEquals(10, tenToTwenty.getMinimumInteger());
assertEquals(10d, tenToTwenty.getMinimumDouble(), 0.00001d);
assertEquals(10f, tenToTwenty.getMinimumFloat(), 0.00001f);
}
public void testGetMaximum() {
assertEquals(20L, tenToTwenty.getMaximumLong());
assertEquals(20, tenToTwenty.getMaximumInteger());
assertEquals(20d, tenToTwenty.getMaximumDouble(), 0.00001d);
assertEquals(20f, tenToTwenty.getMaximumFloat(), 0.00001f);
}
//--------------------------------------------------------------------------
public void testContainsLong() {
assertEquals(false, tenToTwenty.containsLong(null));
assertEquals(true, tenToTwenty.containsLong(nonComparable));
assertEquals(false, tenToTwenty.containsLong(five));
assertEquals(true, tenToTwenty.containsLong(ten));
assertEquals(true, tenToTwenty.containsLong(fifteen));
assertEquals(true, tenToTwenty.containsLong(twenty));
assertEquals(false, tenToTwenty.containsLong(twentyFive));
assertEquals(false, tenToTwenty.containsLong(long8));
assertEquals(true, tenToTwenty.containsLong(long10));
assertEquals(true, tenToTwenty.containsLong(long12));
assertEquals(true, tenToTwenty.containsLong(long20));
assertEquals(false, tenToTwenty.containsLong(long21));
assertEquals(false, tenToTwenty.containsLong(double8));
assertEquals(true, tenToTwenty.containsLong(double10));
assertEquals(true, tenToTwenty.containsLong(double12));
assertEquals(true, tenToTwenty.containsLong(double20));
assertEquals(false, tenToTwenty.containsLong(double21));
assertEquals(false, tenToTwenty.containsLong(float8));
assertEquals(true, tenToTwenty.containsLong(float10));
assertEquals(true, tenToTwenty.containsLong(float12));
assertEquals(true, tenToTwenty.containsLong(float20));
assertEquals(false, tenToTwenty.containsLong(float21));
assertEquals(false, tenToTwenty.containsLong(9L));
assertEquals(true, tenToTwenty.containsLong(10L));
assertEquals(true, tenToTwenty.containsLong(15L));
assertEquals(true, tenToTwenty.containsLong(20L));
assertEquals(false, tenToTwenty.containsLong(21L));
}
public void testContainsInteger() {
assertEquals(false, tenToTwenty.containsInteger(null));
assertEquals(true, tenToTwenty.containsInteger(nonComparable));
assertEquals(false, tenToTwenty.containsInteger(five));
assertEquals(true, tenToTwenty.containsInteger(ten));
assertEquals(true, tenToTwenty.containsInteger(fifteen));
assertEquals(true, tenToTwenty.containsInteger(twenty));
assertEquals(false, tenToTwenty.containsInteger(twentyFive));
assertEquals(false, tenToTwenty.containsInteger(long8));
assertEquals(true, tenToTwenty.containsInteger(long10));
assertEquals(true, tenToTwenty.containsInteger(long12));
assertEquals(true, tenToTwenty.containsInteger(long20));
assertEquals(false, tenToTwenty.containsInteger(long21));
assertEquals(false, tenToTwenty.containsInteger(double8));
assertEquals(true, tenToTwenty.containsInteger(double10));
assertEquals(true, tenToTwenty.containsInteger(double12));
assertEquals(true, tenToTwenty.containsInteger(double20));
assertEquals(false, tenToTwenty.containsInteger(double21));
assertEquals(false, tenToTwenty.containsInteger(float8));
assertEquals(true, tenToTwenty.containsInteger(float10));
assertEquals(true, tenToTwenty.containsInteger(float12));
assertEquals(true, tenToTwenty.containsInteger(float20));
assertEquals(false, tenToTwenty.containsInteger(float21));
assertEquals(false, tenToTwenty.containsInteger(9));
assertEquals(true, tenToTwenty.containsInteger(10));
assertEquals(true, tenToTwenty.containsInteger(15));
assertEquals(true, tenToTwenty.containsInteger(20));
assertEquals(false, tenToTwenty.containsInteger(21));
}
public void testContainsDouble() {
assertEquals(false, tenToTwenty.containsDouble(null));
assertEquals(true, tenToTwenty.containsDouble(nonComparable));
assertEquals(false, tenToTwenty.containsDouble(five));
assertEquals(true, tenToTwenty.containsDouble(ten));
assertEquals(true, tenToTwenty.containsDouble(fifteen));
assertEquals(true, tenToTwenty.containsDouble(twenty));
assertEquals(false, tenToTwenty.containsDouble(twentyFive));
assertEquals(false, tenToTwenty.containsDouble(long8));
assertEquals(true, tenToTwenty.containsDouble(long10));
assertEquals(true, tenToTwenty.containsDouble(long12));
assertEquals(true, tenToTwenty.containsDouble(long20));
assertEquals(false, tenToTwenty.containsDouble(long21));
assertEquals(false, tenToTwenty.containsDouble(double8));
assertEquals(true, tenToTwenty.containsDouble(double10));
assertEquals(true, tenToTwenty.containsDouble(double12));
assertEquals(true, tenToTwenty.containsDouble(double20));
assertEquals(false, tenToTwenty.containsDouble(double21));
assertEquals(false, tenToTwenty.containsDouble(float8));
assertEquals(true, tenToTwenty.containsDouble(float10));
assertEquals(true, tenToTwenty.containsDouble(float12));
assertEquals(true, tenToTwenty.containsDouble(float20));
assertEquals(false, tenToTwenty.containsDouble(float21));
assertEquals(false, tenToTwenty.containsDouble(9d));
assertEquals(true, tenToTwenty.containsDouble(10d));
assertEquals(true, tenToTwenty.containsDouble(15d));
assertEquals(true, tenToTwenty.containsDouble(20d));
assertEquals(false, tenToTwenty.containsDouble(21d));
}
public void testContainsFloat() {
assertEquals(false, tenToTwenty.containsFloat(null));
assertEquals(true, tenToTwenty.containsFloat(nonComparable));
assertEquals(false, tenToTwenty.containsFloat(five));
assertEquals(true, tenToTwenty.containsFloat(ten));
assertEquals(true, tenToTwenty.containsFloat(fifteen));
assertEquals(true, tenToTwenty.containsFloat(twenty));
assertEquals(false, tenToTwenty.containsFloat(twentyFive));
assertEquals(false, tenToTwenty.containsFloat(long8));
assertEquals(true, tenToTwenty.containsFloat(long10));
assertEquals(true, tenToTwenty.containsFloat(long12));
assertEquals(true, tenToTwenty.containsFloat(long20));
assertEquals(false, tenToTwenty.containsFloat(long21));
assertEquals(false, tenToTwenty.containsFloat(double8));
assertEquals(true, tenToTwenty.containsFloat(double10));
assertEquals(true, tenToTwenty.containsFloat(double12));
assertEquals(true, tenToTwenty.containsFloat(double20));
assertEquals(false, tenToTwenty.containsFloat(double21));
assertEquals(false, tenToTwenty.containsFloat(float8));
assertEquals(true, tenToTwenty.containsFloat(float10));
assertEquals(true, tenToTwenty.containsFloat(float12));
assertEquals(true, tenToTwenty.containsFloat(float20));
assertEquals(false, tenToTwenty.containsFloat(float21));
assertEquals(false, tenToTwenty.containsFloat(9f));
assertEquals(true, tenToTwenty.containsFloat(10f));
assertEquals(true, tenToTwenty.containsFloat(15f));
assertEquals(true, tenToTwenty.containsFloat(20f));
assertEquals(false, tenToTwenty.containsFloat(21f));
}
//--------------------------------------------------------------------------
public void testContainsRange() {
assertEquals(false, tenToTwenty.containsRange(createRange(five, five)));
assertEquals(false, tenToTwenty.containsRange(createRange(five, ten)));
assertEquals(false, tenToTwenty.containsRange(createRange(five, twelve)));
assertEquals(false, tenToTwenty.containsRange(createRange(five, fifteen)));
assertEquals(false, tenToTwenty.containsRange(createRange(five, twenty)));
assertEquals(false, tenToTwenty.containsRange(createRange(five, twentyFive)));
assertEquals(true, tenToTwenty.containsRange(createRange(ten, ten)));
assertEquals(true, tenToTwenty.containsRange(createRange(ten, twelve)));
assertEquals(true, tenToTwenty.containsRange(createRange(ten, fifteen)));
assertEquals(true, tenToTwenty.containsRange(createRange(ten, twenty)));
assertEquals(false, tenToTwenty.containsRange(createRange(ten, twentyFive)));
assertEquals(true, tenToTwenty.containsRange(createRange(twelve, twelve)));
assertEquals(true, tenToTwenty.containsRange(createRange(twelve, fifteen)));
assertEquals(true, tenToTwenty.containsRange(createRange(twelve, twenty)));
assertEquals(false, tenToTwenty.containsRange(createRange(twelve, twentyFive)));
assertEquals(true, tenToTwenty.containsRange(createRange(fifteen, fifteen)));
assertEquals(true, tenToTwenty.containsRange(createRange(fifteen, twenty)));
assertEquals(false, tenToTwenty.containsRange(createRange(fifteen, twentyFive)));
assertEquals(true, tenToTwenty.containsRange(createRange(twenty, twenty)));
assertEquals(false, tenToTwenty.containsRange(createRange(twenty, twentyFive)));
assertEquals(false, tenToTwenty.containsRange(createRange(twentyFive, twentyFive)));
}
public void testOverlapsRange() {
assertEquals(false, tenToTwenty.overlapsRange(createRange(five, five)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(five, ten)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(five, twelve)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(five, fifteen)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(five, twenty)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(five, twentyFive)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(ten, ten)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(ten, twelve)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(ten, fifteen)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(ten, twenty)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(ten, twentyFive)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(twelve, twelve)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(twelve, fifteen)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(twelve, twenty)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(twelve, twentyFive)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(fifteen, fifteen)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(fifteen, twenty)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(fifteen, twentyFive)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(twenty, twenty)));
assertEquals(true, tenToTwenty.overlapsRange(createRange(twenty, twentyFive)));
assertEquals(false, tenToTwenty.overlapsRange(createRange(twentyFive, twentyFive)));
}
//--------------------------------------------------------------------------
public void testEquals() {
assertEquals(false, tenToTwenty.equals(createRange(ten, fifteen)));
assertEquals(false, tenToTwenty.equals(createRange(ten, twentyFive)));
assertEquals(false, tenToTwenty.equals(createRange(fifteen, twenty)));
assertEquals(false, tenToTwenty.equals(createRange(five, twenty)));
assertEquals(false, tenToTwenty.equals(createRange(five, ten)));
assertEquals(false, tenToTwenty.equals(createRange(ten)));
assertEquals(true, tenToTwenty.equals(createRange(ten, twenty)));
assertEquals(true, tenToTwenty.equals(createRange(twenty, ten)));
assertEquals(false, tenToTwenty.equals(null));
assertEquals(false, tenToTwenty.equals(new Object()));
assertEquals(false, tenToTwenty.equals(otherRange));
}
public void testHashCode() {
assertEquals(tenToTwenty.hashCode(), tenToTwenty.hashCode());
assertTrue(tenToTwenty.hashCode() != 0);
}
public void testToString() {
assertEquals("Range[10,20]", tenToTwenty.toString());
assertEquals("Range[-20,-10]", createRange(new Integer(-20), new Integer(-10)).toString());
}
protected abstract Range createRange(Integer integer);
protected abstract Range createRange(Integer integer1, Integer integer2);
}