package org.mapfish.print.attribute.map;
import org.junit.Test;
import org.mapfish.print.map.DistanceUnit;
import org.mapfish.print.map.Scale;
import static org.junit.Assert.assertEquals;
import static org.mapfish.print.Constants.PDF_DPI;
import static org.mapfish.print.attribute.map.ZoomLevelSnapStrategy.CLOSEST_HIGHER_SCALE_ON_TIE;
import static org.mapfish.print.attribute.map.ZoomLevelSnapStrategy.CLOSEST_LOWER_SCALE_ON_TIE;
import static org.mapfish.print.attribute.map.ZoomLevelSnapStrategy.HIGHER_SCALE;
import static org.mapfish.print.attribute.map.ZoomLevelSnapStrategy.LOWER_SCALE;
public class ScaleAdjustmentAccuracyTest {
private static final double TOLERANCE = 0.05;
private static final ZoomLevels ZOOM_LEVELS = new ZoomLevels(20, 16, 12, 8, 4);
private static final ZoomLevelSnapStrategy.SearchResult SCALE_8_RESULT =
new ZoomLevelSnapStrategy.SearchResult(3, ZOOM_LEVELS);
private static final ZoomLevelSnapStrategy.SearchResult SCALE_12_RESULT =
new ZoomLevelSnapStrategy.SearchResult(2, ZOOM_LEVELS);
private static final ZoomLevelSnapStrategy.SearchResult SCALE_16_RESULT =
new ZoomLevelSnapStrategy.SearchResult(1, ZOOM_LEVELS);
@Test
public void testSearchCLOSEST_LOWER_SCALE_ON_MATCHMatch() throws Exception {
assertEquals(SCALE_12_RESULT, CLOSEST_LOWER_SCALE_ON_TIE.search(
new Scale(12, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, CLOSEST_LOWER_SCALE_ON_TIE.search(
new Scale(12.01, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, CLOSEST_LOWER_SCALE_ON_TIE.search(
new Scale(12.5, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_8_RESULT, CLOSEST_LOWER_SCALE_ON_TIE.search(
new Scale(10, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, CLOSEST_LOWER_SCALE_ON_TIE.search(
new Scale(13, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, CLOSEST_LOWER_SCALE_ON_TIE.search(
new Scale(11.88, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, CLOSEST_LOWER_SCALE_ON_TIE.search(
new Scale(11, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_8_RESULT, CLOSEST_LOWER_SCALE_ON_TIE.search(
new Scale(9, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
}
@Test
public void testSearchCLOSEST_HIGHER_SCALE_ON_MATCHMatch() throws Exception {
assertEquals(SCALE_12_RESULT, CLOSEST_HIGHER_SCALE_ON_TIE.search(
new Scale(12, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, CLOSEST_HIGHER_SCALE_ON_TIE.search(
new Scale(12.01, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, CLOSEST_HIGHER_SCALE_ON_TIE.search(
new Scale(12.5, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, CLOSEST_HIGHER_SCALE_ON_TIE.search(
new Scale(10.00001, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, CLOSEST_HIGHER_SCALE_ON_TIE.search(
new Scale(13, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, CLOSEST_HIGHER_SCALE_ON_TIE.search(
new Scale(11.88, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, CLOSEST_HIGHER_SCALE_ON_TIE.search(
new Scale(11, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_8_RESULT, CLOSEST_HIGHER_SCALE_ON_TIE.search(
new Scale(9, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
}
@Test
public void testSearchNextHighest() throws Exception {
assertEquals(SCALE_12_RESULT, HIGHER_SCALE.search(
new Scale(12, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, HIGHER_SCALE.search(
new Scale(12.01, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, HIGHER_SCALE.search(
new Scale(12.5, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, HIGHER_SCALE.search(
new Scale(10, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_16_RESULT, HIGHER_SCALE.search(
new Scale(13, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, HIGHER_SCALE.search(
new Scale(11.88, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, HIGHER_SCALE.search(
new Scale(11, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, HIGHER_SCALE.search(
new Scale(9, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
}
@Test
public void testSearchLower() throws Exception {
assertEquals(SCALE_12_RESULT, LOWER_SCALE.search(
new Scale(12, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, LOWER_SCALE.search(
new Scale(12.01, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, LOWER_SCALE.search(
new Scale(12.5, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_8_RESULT, LOWER_SCALE.search(
new Scale(10, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, LOWER_SCALE.search(
new Scale(13, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_12_RESULT, LOWER_SCALE.search(
new Scale(11.88, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_8_RESULT, LOWER_SCALE.search(
new Scale(11, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
assertEquals(SCALE_8_RESULT, LOWER_SCALE.search(
new Scale(9, DistanceUnit.M, PDF_DPI), TOLERANCE, ZOOM_LEVELS));
}
}