001: /*
002: * GeoTools - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2006, Geotools Project Managment Committee (PMC)
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or (at your option) any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: */
016: package org.geotools.util;
017:
018: import javax.units.SI;
019: import javax.units.Unit;
020: import junit.framework.Test;
021: import junit.framework.TestCase;
022: import junit.framework.TestSuite;
023:
024: /**
025: * Tests the {@link MeasurementRange}.
026: *
027: * @since 2.4
028: * @source $URL: http://svn.geotools.org/geotools/tags/2.4.1/modules/library/metadata/src/test/java/org/geotools/util/MeasurementRangeTest.java $
029: * @version $Id: MeasurementRangeTest.java 26601 2007-08-19 23:16:35Z desruisseaux $
030: * @author Martin Desruisseaux
031: */
032: public class MeasurementRangeTest extends TestCase {
033: /**
034: * Run the suit from the command line.
035: */
036: public static void main(final String[] args) {
037: junit.textui.TestRunner.run(suite());
038: }
039:
040: /**
041: * Returns the test suite.
042: */
043: public static Test suite() {
044: return new TestSuite(MeasurementRangeTest.class);
045: }
046:
047: /**
048: * Constructs a test case with the given name.
049: */
050: public MeasurementRangeTest(final String name) {
051: super (name);
052: }
053:
054: /**
055: * Tests unit conversions.
056: */
057: public void testConversion() {
058: final MeasurementRange range = new MeasurementRange(1000f,
059: 2000f, SI.METER);
060: assertSame(range, range.convertTo(SI.METER));
061: final Unit KILOMETER = SI.KILO(SI.METER);
062: assertEquals(new MeasurementRange(1f, 2f, KILOMETER), range
063: .convertTo(KILOMETER));
064: }
065:
066: /**
067: * Tests the bounds values of a range of integers.
068: */
069: public void testIntegerBounds() {
070: final NumberRange range = new NumberRange(10, 20);
071: assertEquals(10, range.getMinimum(), 0);
072: assertEquals(10, range.getMinimum(true), 0);
073: assertEquals(9, range.getMinimum(false), 0);
074: assertEquals(20, range.getMaximum(), 0);
075: assertEquals(20, range.getMaximum(true), 0);
076: assertEquals(21, range.getMaximum(false), 0);
077: }
078:
079: /**
080: * Tests union and intersection without units and type change.
081: */
082: public void testIntegerIntersect() {
083: NumberRange r1 = new NumberRange(10, 20);
084: NumberRange r2 = new NumberRange(15, 30);
085: assertTrue(r1.equals(r1));
086: assertTrue(r2.equals(r2));
087: assertFalse(r1.equals(r2));
088: assertEquals(Integer.class, r1.getElementClass());
089: assertEquals(Integer.class, r2.getElementClass());
090: assertEquals(new NumberRange(10, 30), r1.union(r2));
091: assertEquals(new NumberRange(15, 20), r1.intersect(r2));
092: }
093:
094: /**
095: * Tests union and intersection with type change.
096: */
097: public void testDoubleIntersect() {
098: NumberRange r1 = new NumberRange(10.0, 20.0);
099: NumberRange r2 = new NumberRange(15.0, 30.0);
100: assertEquals(Double.class, r1.getElementClass());
101: assertEquals(Double.class, r2.getElementClass());
102: assertEquals(new NumberRange(10.0, 30.0), r1.union(r2));
103: assertEquals(new NumberRange(15.0, 20.0), r1.intersect(r2));
104: }
105:
106: /**
107: * Tests union and intersection with type change.
108: */
109: public void testIntegerDoubleIntersect() {
110: NumberRange r1 = new NumberRange(10, 20);
111: NumberRange r2 = new NumberRange(15.0, 30.0);
112: assertEquals(Integer.class, r1.getElementClass());
113: assertEquals(Double.class, r2.getElementClass());
114: assertEquals(new NumberRange(10.0, 30.0), r1.union(r2));
115: assertEquals(new NumberRange(15, 20), r1.intersect(r2));
116:
117: r2 = new NumberRange(15.5, 30.0);
118: assertEquals(new NumberRange(15.5f, 20.0f), r1.intersect(r2));
119: }
120:
121: /**
122: * Tests union and intersection with type change.
123: */
124: public void testDoubleIntegerIntersect() {
125: NumberRange r1 = new NumberRange(10.0, 20.0);
126: NumberRange r2 = new NumberRange(15, 30);
127: assertEquals(Double.class, r1.getElementClass());
128: assertEquals(Integer.class, r2.getElementClass());
129: assertEquals(new NumberRange(10.0, 30.0), r1.union(r2));
130: assertEquals(new NumberRange(15, 20), r1.intersect(r2));
131:
132: r1 = new NumberRange(10.0, 20.5);
133: assertEquals(new NumberRange(15.0f, 20.5f), r1.intersect(r2));
134: }
135:
136: /**
137: * Tests union and intersection involving a unit conversion.
138: */
139: public void testIntersectWithConversion() {
140: final Unit KILOMETER = SI.KILO(SI.METER);
141: NumberRange r1 = new MeasurementRange(1000f, 2000f, SI.METER);
142: NumberRange r2 = new MeasurementRange(1.5f, 3f, KILOMETER);
143: assertEquals(Float.class, r1.getElementClass());
144: assertEquals(Float.class, r2.getElementClass());
145: assertEquals(new MeasurementRange(1000f, 3000f, SI.METER), r1
146: .union(r2));
147: assertEquals(new MeasurementRange(1f, 3f, KILOMETER), r2
148: .union(r1));
149: assertEquals(new MeasurementRange(1500f, 2000f, SI.METER), r1
150: .intersect(r2));
151: assertEquals(new MeasurementRange(1.5f, 2f, KILOMETER), r2
152: .intersect(r1));
153: }
154:
155: /**
156: * Tests {@link MeasurementRange#toString()} method.
157: */
158: public void testToString() {
159: final MeasurementRange range = new MeasurementRange(10, 20, SI
160: .KILO(SI.METER));
161: assertEquals("[10.0, 20.0] km", range.toString());
162: }
163: }
|