/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2016 Open Source Geospatial Foundation (OSGeo)
* (C) 2014-2016 Boundless Spatial
*
* 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.ysld.parse;
import static org.geotools.ysld.TestUtils.rangeContains;
import static org.hamcrest.Matchers.closeTo;
import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.lessThan;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.*;
import java.util.Arrays;
import org.geotools.ysld.TestUtils;
import org.hamcrest.Matchers;
import org.junit.Test;
public class ListZoomContextTest {
static final double EPSILON = 0.0000001;
@Test
public void testLevels() {
ListZoomContext ctxt = new ListZoomContext(Arrays.asList(5000000d));
assertThat(ctxt.getScaleDenominator(0), closeTo(5000000, EPSILON));
}
@Test
public void testNonZeroInitial() {
ListZoomContext ctxt = new ListZoomContext(Arrays.asList(5000000d), 2);
assertThat(ctxt.getScaleDenominator(2), closeTo(5000000, EPSILON));
}
@Test
public void testBeforeList() {
ListZoomContext ctxt = new ListZoomContext(Arrays.asList(5000000d));
assertThat(ctxt.getScaleDenominator(-1), is(Double.POSITIVE_INFINITY));
}
@Test
public void testAfterList() {
ListZoomContext ctxt = new ListZoomContext(Arrays.asList(5000000d));
assertThat(ctxt.getScaleDenominator(1), is(0d));
}
@Test
public void testMultiple() {
ListZoomContext ctxt = new ListZoomContext(Arrays.asList(5000000d, 2000000d, 1000000d));
assertThat(ctxt.getScaleDenominator(-1), is(Double.POSITIVE_INFINITY));
assertThat(ctxt.getScaleDenominator(0), closeTo(5000000, EPSILON));
assertThat(ctxt.getScaleDenominator(1), closeTo(2000000, EPSILON));
assertThat(ctxt.getScaleDenominator(2), closeTo(1000000, EPSILON));
assertThat(ctxt.getScaleDenominator(3), is(0d));
}
@Test
public void testSingletonRange() {
ListZoomContext ctxt = new ListZoomContext(Arrays.asList(5000000d, 2000000d, 1000000d));
ScaleRange result = ctxt.getRange(1, 1);
assertThat(result, not(rangeContains(1 / EPSILON)));
assertThat(result, not(rangeContains(10_000_000d)));
assertThat(result, not(rangeContains(5_000_000d)));
assertThat(result, (rangeContains(2_000_000d)));
assertThat(result, not(rangeContains(1_000_000d)));
assertThat(result, not(rangeContains(EPSILON)));
}
@Test
public void testSingletonRangeFirst() {
ListZoomContext ctxt = new ListZoomContext(Arrays.asList(5000000d, 2000000d, 1000000d));
ScaleRange result = ctxt.getRange(0, 0);
// assertThat(result, rangeContains(1/EPSILON));
assertThat(result, (rangeContains(5_000_000d)));
assertThat(result, not(rangeContains(2_000_000d)));
assertThat(result, not(rangeContains(1_000_000d)));
assertThat(result, not(rangeContains(EPSILON)));
}
@Test
public void testSingletonRangeLast() {
ListZoomContext ctxt = new ListZoomContext(Arrays.asList(5000000d, 2000000d, 1000000d));
ScaleRange result = ctxt.getRange(2, 2);
assertThat(result, not(rangeContains(1 / EPSILON)));
assertThat(result, not(rangeContains(5_000_000d)));
assertThat(result, not(rangeContains(2_000_000d)));
assertThat(result, (rangeContains(1_000_000d)));
// assertThat(result, rangeContains(EPSILON));
}
@Test
public void testRange() {
ListZoomContext ctxt = new ListZoomContext(
Arrays.asList(5000000d, 2000000d, 1000000d, 500000d, 200000d, 100000d));
ScaleRange result = ctxt.getRange(1, 3);
assertThat(result, not(rangeContains(1 / EPSILON)));
assertThat(result, not(rangeContains(5_000_000d)));
assertThat(result, (rangeContains(2_000_000d)));
assertThat(result, (rangeContains(1_000_000d)));
assertThat(result, (rangeContains(500_000d)));
assertThat(result, not(rangeContains(200_000d)));
assertThat(result, not(rangeContains(100_000d)));
assertThat(result, not(rangeContains(EPSILON)));
}
@Test
public void testRangeFirst() {
ListZoomContext ctxt = new ListZoomContext(
Arrays.asList(5000000d, 2000000d, 1000000d, 500000d, 200000d, 100000d));
ScaleRange result = ctxt.getRange(0, 3);
// assertThat(result, (rangeContains(1/EPSILON)));
assertThat(result, (rangeContains(5_000_000d)));
assertThat(result, (rangeContains(2_000_000d)));
assertThat(result, (rangeContains(1_000_000d)));
assertThat(result, (rangeContains(500_000d)));
assertThat(result, not(rangeContains(200_000d)));
assertThat(result, not(rangeContains(100_000d)));
assertThat(result, not(rangeContains(EPSILON)));
}
@Test
public void testRangeLast() {
ListZoomContext ctxt = new ListZoomContext(
Arrays.asList(5000000d, 2000000d, 1000000d, 500000d, 200000d, 100000d));
ScaleRange result = ctxt.getRange(3, 5);
assertThat(result, not(rangeContains(1 / EPSILON)));
assertThat(result, not(rangeContains(5_000_000d)));
assertThat(result, not(rangeContains(2_000_000d)));
assertThat(result, not(rangeContains(1_000_000d)));
assertThat(result, (rangeContains(500_000d)));
assertThat(result, (rangeContains(200_000d)));
assertThat(result, (rangeContains(100_000d)));
// assertThat(result, (rangeContains(EPSILON)));
}
@Test
public void testRangeOpenStart() {
ListZoomContext ctxt = new ListZoomContext(
Arrays.asList(5000000d, 2000000d, 1000000d, 500000d, 200000d, 100000d));
ScaleRange result = ctxt.getRange(null, 3);
assertThat(result, (rangeContains(1 / EPSILON)));
assertThat(result, (rangeContains(5_000_000d)));
assertThat(result, (rangeContains(2_000_000d)));
assertThat(result, (rangeContains(1_000_000d)));
assertThat(result, (rangeContains(500_000d)));
assertThat(result, not(rangeContains(200_000d)));
assertThat(result, not(rangeContains(100_000d)));
assertThat(result, not(rangeContains(EPSILON)));
}
@Test
public void testRangeOpenEnd() {
ListZoomContext ctxt = new ListZoomContext(
Arrays.asList(5000000d, 2000000d, 1000000d, 500000d, 200000d, 100000d));
ScaleRange result = ctxt.getRange(3, null);
assertThat(result, not(rangeContains(1 / EPSILON)));
assertThat(result, not(rangeContains(5_000_000d)));
assertThat(result, not(rangeContains(2_000_000d)));
assertThat(result, not(rangeContains(1_000_000d)));
assertThat(result, (rangeContains(500_000d)));
assertThat(result, (rangeContains(200_000d)));
assertThat(result, (rangeContains(100_000d)));
assertThat(result, (rangeContains(EPSILON)));
}
@Test
public void testRangePastStart() {
ListZoomContext ctxt = new ListZoomContext(
Arrays.asList(5000000d, 2000000d, 1000000d, 500000d, 200000d, 100000d));
ScaleRange result = ctxt.getRange(-1, 3);
assertThat(result, (rangeContains(1 / EPSILON)));
assertThat(result, (rangeContains(5_000_000d)));
assertThat(result, (rangeContains(2_000_000d)));
assertThat(result, (rangeContains(1_000_000d)));
assertThat(result, (rangeContains(500_000d)));
assertThat(result, not(rangeContains(200_000d)));
assertThat(result, not(rangeContains(100_000d)));
assertThat(result, not(rangeContains(EPSILON)));
}
@Test
public void testRangePastEnd() {
ListZoomContext ctxt = new ListZoomContext(
Arrays.asList(5000000d, 2000000d, 1000000d, 500000d, 200000d, 100000d));
ScaleRange result = ctxt.getRange(3, 6);
assertThat(result, not(rangeContains(1 / EPSILON)));
assertThat(result, not(rangeContains(5_000_000d)));
assertThat(result, not(rangeContains(2_000_000d)));
assertThat(result, not(rangeContains(1_000_000d)));
assertThat(result, (rangeContains(500_000d)));
assertThat(result, (rangeContains(200_000d)));
assertThat(result, (rangeContains(100_000d)));
assertThat(result, (rangeContains(EPSILON)));
}
@Test
public void testRangeEntirelyPastEnd() {
ListZoomContext ctxt = new ListZoomContext(
Arrays.asList(5000000d, 2000000d, 1000000d, 500000d, 200000d, 100000d));
ScaleRange result = ctxt.getRange(7, 8);
assertThat(result, not(rangeContains(1 / EPSILON)));
assertThat(result, not(rangeContains(5_000_000d)));
assertThat(result, not(rangeContains(2_000_000d)));
assertThat(result, not(rangeContains(1_000_000d)));
assertThat(result, not(rangeContains(500_000d)));
assertThat(result, not(rangeContains(200_000d)));
assertThat(result, not(rangeContains(100_000d)));
assertThat(result, not(rangeContains(EPSILON)));
}
@Test
public void testRangeEntirelyPastStart() {
ListZoomContext ctxt = new ListZoomContext(
Arrays.asList(5000000d, 2000000d, 1000000d, 500000d, 200000d, 100000d));
ScaleRange result = ctxt.getRange(-3, -2);
assertThat(result, not(rangeContains(1 / EPSILON)));
assertThat(result, not(rangeContains(5_000_000d)));
assertThat(result, not(rangeContains(2_000_000d)));
assertThat(result, not(rangeContains(1_000_000d)));
assertThat(result, not(rangeContains(500_000d)));
assertThat(result, not(rangeContains(200_000d)));
assertThat(result, not(rangeContains(100_000d)));
assertThat(result, not(rangeContains(EPSILON)));
}
}