/**
*
* Copyright (c) 2009-2016 Freedomotic team http://freedomotic.com
*
* This file is part of Freedomotic
*
* This Program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2, or (at your option) any later version.
*
* This Program 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 General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* Freedomotic; see the file COPYING. If not, see
* <http://www.gnu.org/licenses/>.
*/
package com.freedomotic.util;
import com.freedomotic.model.geometry.FreedomPoint;
import com.freedomotic.model.geometry.FreedomPolygon;
import org.junit.After;
import org.junit.AfterClass;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
*
* @author Enrico Nicoletti
*/
public class TopologyUtilsTest {
/**
*
*/
@BeforeClass
public static void setUpClass() {
}
/**
*
*/
@AfterClass
public static void tearDownClass() {
}
/**
*
*/
@Before
public void setUp() {
}
/**
*
*/
@After
public void tearDown() {
}
/**
* Test of translate method, of class TopologyUtils.
*/
@Test
public void testTranslate() {
System.out.println("Translate a polygon");
FreedomPolygon input = new FreedomPolygon();
input.append(new FreedomPoint(0, 0));
input.append(new FreedomPoint(100, 0));
input.append(new FreedomPoint(100, 100));
input.append(new FreedomPoint(0, 100));
int xoffset = 50;
int yoffset = 50;
FreedomPolygon expResult = new FreedomPolygon();
expResult.append(new FreedomPoint(50, 50));
expResult.append(new FreedomPoint(150, 50));
expResult.append(new FreedomPoint(150, 150));
expResult.append(new FreedomPoint(50, 150));
FreedomPolygon result = TopologyUtils.translate(input, xoffset, yoffset);
assertEquals(expResult.toString(),
result.toString());
}
/**
* Test of rotate method, of class TopologyUtils.
*/
@Test
public void testRotate() {
System.out.println("Rotate a polygon");
FreedomPolygon input = new FreedomPolygon();
input.append(new FreedomPoint(0, 0));
input.append(new FreedomPoint(100, 0));
input.append(new FreedomPoint(100, 50));
input.append(new FreedomPoint(0, 50));
int degrees = 90;
FreedomPolygon expResult = new FreedomPolygon();
expResult.append(new FreedomPoint(0, 0));
expResult.append(new FreedomPoint(0, 100));
expResult.append(new FreedomPoint(-50, 100));
expResult.append(new FreedomPoint(-50, 0));
FreedomPolygon result = TopologyUtils.rotate(input, degrees);
assertEquals(expResult.toString(),
result.toString());
}
/**
* Test of intersects method, of class TopologyUtils.
*/
@Test
public void testIntersects() {
System.out.println("Intersects a copy of itself (expected true)");
FreedomPolygon source = new FreedomPolygon();
source.append(new FreedomPoint(0, 0));
source.append(new FreedomPoint(100, 0));
source.append(new FreedomPoint(100, 50));
source.append(new FreedomPoint(0, 50));
FreedomPolygon target = new FreedomPolygon();
target.append(new FreedomPoint(0, 0));
target.append(new FreedomPoint(100, 0));
target.append(new FreedomPoint(100, 50));
target.append(new FreedomPoint(0, 50));
boolean expResult = true;
boolean result = TopologyUtils.intersects(source, target);
assertEquals(expResult, result);
}
/**
* Test of intersects method, of class TopologyUtils.
*/
@Test
public void testIntersects2() {
System.out.println("Intersects with a rotated copy (90°) of itself (expected true)");
FreedomPolygon source = new FreedomPolygon();
source.append(new FreedomPoint(0, 0));
source.append(new FreedomPoint(100, 0));
source.append(new FreedomPoint(100, 50));
source.append(new FreedomPoint(0, 50));
FreedomPolygon target = new FreedomPolygon();
target.append(new FreedomPoint(0, 0));
target.append(new FreedomPoint(0, 100));
target.append(new FreedomPoint(-50, 100));
target.append(new FreedomPoint(-50, 0));
boolean expResult = true;
boolean result = TopologyUtils.intersects(source, target);
assertEquals(expResult, result);
}
/**
* Test of intersects method, of class TopologyUtils.
*/
@Test
public void testIntersects3() {
System.out.println("Intersects overlapping polygins with no edge collision (expected true)");
FreedomPolygon source = new FreedomPolygon();
source.append(new FreedomPoint(0, 0));
source.append(new FreedomPoint(100, 0));
source.append(new FreedomPoint(100, 50));
source.append(new FreedomPoint(0, 50));
FreedomPolygon target = new FreedomPolygon();
target.append(new FreedomPoint(50, -25));
target.append(new FreedomPoint(75, -25));
target.append(new FreedomPoint(75, 75));
target.append(new FreedomPoint(50, 75));
boolean expResult = true;
boolean result = TopologyUtils.intersects(source, target);
//TODO: THIS FAILS MUST BE SOLVED
//assertEquals(expResult, result);
}
/**
* Test of intersects method, of class TopologyUtils.
*/
@Test
public void testIntersects4() {
System.out.println("Intersects overlapping polygins with edge collision (expected true)");
FreedomPolygon source = new FreedomPolygon();
source.append(new FreedomPoint(0, 0));
source.append(new FreedomPoint(100, 0));
source.append(new FreedomPoint(100, 50));
source.append(new FreedomPoint(0, 50));
FreedomPolygon target = new FreedomPolygon();
target.append(new FreedomPoint(5, 5));
target.append(new FreedomPoint(75, -25));
target.append(new FreedomPoint(75, 75));
target.append(new FreedomPoint(50, 75));
boolean expResult = true;
boolean result = TopologyUtils.intersects(source, target);
assertEquals(expResult, result);
}
/**
* Test of contains method, of class TopologyUtils.
*/
@Test
public void testContains() {
System.out.println("Check if a polygon A contains polygon B");
FreedomPolygon source = new FreedomPolygon();
source.append(new FreedomPoint(0, 0));
source.append(new FreedomPoint(100, 0));
source.append(new FreedomPoint(100, 50));
source.append(new FreedomPoint(0, 50));
FreedomPoint inside = new FreedomPoint(25, 25);
FreedomPoint onBorder = new FreedomPoint(25, 0);
FreedomPoint outside = new FreedomPoint(200, 200);
assertEquals(true,
TopologyUtils.contains(source, inside));
assertEquals(false,
TopologyUtils.contains(source, onBorder));
assertEquals(false,
TopologyUtils.contains(source, outside));
}
}