/* * Copyright 2015 MovingBlocks * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.terasology.polyworld; import java.util.ArrayList; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.terasology.math.geom.Rect2i; import org.terasology.math.geom.BaseVector2f; import org.terasology.math.geom.ImmutableVector2f; import org.terasology.math.geom.Rect2f; import org.terasology.polyworld.graph.Corner; import org.terasology.polyworld.graph.Edge; import org.terasology.polyworld.graph.Graph; import org.terasology.polyworld.graph.Region; /** * Tests the correct representation of a {@link Graph} */ public abstract class GraphTest { protected Graph graph; protected Rect2i intBounds; protected Rect2f realBounds; @Test public void testGraphCornerLocations() { List<BaseVector2f> corners = new ArrayList<>(); graph.getCorners().forEach(c -> corners.add(c.getLocation())); // check location of all border corners Assert.assertTrue(corners.contains(new ImmutableVector2f(realBounds.minX(), realBounds.minY()))); Assert.assertTrue(corners.contains(new ImmutableVector2f(realBounds.minX(), realBounds.maxY()))); Assert.assertTrue(corners.contains(new ImmutableVector2f(realBounds.maxX(), realBounds.minY()))); Assert.assertTrue(corners.contains(new ImmutableVector2f(realBounds.maxX(), realBounds.maxY()))); } @Test public void testGraphEdgesExist() { for (Edge e : graph.getEdges()) { Assert.assertTrue(graph.getRegions().contains(e.getRegion0())); Assert.assertTrue(graph.getRegions().contains(e.getRegion1())); Assert.assertTrue(graph.getCorners().contains(e.getCorner0())); Assert.assertTrue(graph.getCorners().contains(e.getCorner1())); } } @Test public void testGraphRelations() { for (Edge e : graph.getEdges()) { Region r0 = e.getRegion0(); Region r1 = e.getRegion1(); Corner c0 = e.getCorner0(); Corner c1 = e.getCorner1(); Assert.assertTrue(r0.getCorners().contains(c0)); Assert.assertTrue(r0.getCorners().contains(c1)); Assert.assertTrue(r1.getCorners().contains(c0)); Assert.assertTrue(r1.getCorners().contains(c1)); Assert.assertTrue(c0.getTouches().contains(r0)); Assert.assertTrue(c0.getTouches().contains(r1)); Assert.assertTrue(c1.getTouches().contains(r0)); Assert.assertTrue(c1.getTouches().contains(r1)); Assert.assertTrue(c1.getAdjacent().contains(c0)); Assert.assertTrue(c0.getAdjacent().contains(c1)); Assert.assertTrue(r0.getNeighbors().contains(r1)); Assert.assertTrue(r1.getNeighbors().contains(r0)); } } @Test public void testGraphCornerRegions() { for (Region r : graph.getRegions()) { Assert.assertTrue(graph.getCorners().containsAll(r.getCorners())); } } @Test public void testGraphCornerBorderFlag() { float eps = 0.1f; for (Corner c : graph.getCorners()) { if ((Math.abs(c.getLocation().getX() - realBounds.minX()) < eps) || (Math.abs(c.getLocation().getX() - realBounds.maxX()) < eps) || (Math.abs(c.getLocation().getY() - realBounds.minY()) < eps) || (Math.abs(c.getLocation().getY() - realBounds.maxY()) < eps)) { Assert.assertTrue("Corner must have border flag: " + c, c.isBorder()); } else { Assert.assertFalse("Corner must not have border flag: " + c, c.isBorder()); } } } @Test public void testGraphRegionNeighborsSet() { for (Region r : graph.getRegions()) { Assert.assertFalse(r.getNeighbors().isEmpty()); } } @Test public void testGraphCornerTouchesSet() { for (Corner c : graph.getCorners()) { Assert.assertFalse(c.getTouches().isEmpty()); } } }