/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2014, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotools.coverage.io.util;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.geotools.util.DateRange;
import org.geotools.util.NumberRange;
import org.junit.Assert;
import org.junit.Test;
/**
* Testing Range Trees and related comparators
*/
public class RangeTreeTest extends Assert {
@Test
public void testDateRangeOrderCompare() {
final long time1 = 1000000000l;
final Date start1 = new Date(time1);
final Date end1 = new Date(time1 + 1000000l);
final long time2 = 1000100000l;
final Date start2 = new Date(time2);
final Date end2 = new Date(time2 + 1000000l);
final DateRange dr1 = new DateRange(start1, end1);
final DateRange dr2 = new DateRange(start2, end2);
final List<DateRange> list = new ArrayList<DateRange>();
list.add(dr2);
list.add(dr1);
final DateRangeTreeSet treeSet = new DateRangeTreeSet(list);
assertSame(dr2, treeSet.last());
assertSame(dr1, treeSet.first());
final DateRangeTreeSet treeSet2 = new DateRangeTreeSet();
treeSet2.add(dr2);
treeSet2.add(dr1);
assertSame(treeSet.last(), treeSet2.last());
assertSame(treeSet.first(), treeSet2.first());
}
@Test
public void testDoubleRangeOrderCompare() {
final NumberRange<Double> dr1 = NumberRange.create(5d, 12d);
final NumberRange<Double> dr2 = NumberRange.create(10d, 15d);
final NumberRange<Double> dr3 = NumberRange.create(10d, 20d);
final NumberRange<Double> dr4 = NumberRange.create(15d, 20d);
final NumberRange<Double> dr5 = NumberRange.create(15d, 30d);
final NumberRange<Double> dr6 = NumberRange.create(20d, 30d);
final NumberRange<Double> dr7 = NumberRange.create(25d, 30d);
final List<NumberRange<Double>> list = new ArrayList<NumberRange<Double>>();
list.add(dr1);
list.add(dr2);
list.add(dr3);
list.add(dr4);
list.add(dr5);
list.add(dr6);
list.add(dr7);
final DoubleRangeTreeSet treeSet = new DoubleRangeTreeSet(list);
assertSame(dr7, treeSet.last());
assertSame(dr1, treeSet.first());
// Make sure that even with different insert order, the results come back in the same order
final DoubleRangeTreeSet treeSet2 = new DoubleRangeTreeSet();
treeSet2.add(dr2);
treeSet2.add(dr1);
treeSet2.add(dr3);
treeSet2.add(dr7);
treeSet2.add(dr5);
treeSet2.add(dr4);
treeSet2.add(dr6);
assertSame(treeSet2.last(), treeSet.last());
assertSame(treeSet2.first(), treeSet.first());
}
}