package uk.ac.rhul.cs.cl1; import static org.junit.Assert.*; import org.junit.Test; /** * Test cases for the MutableNodeSet class * * @author tamas */ public class MutableNodeSetTest extends NodeSetTest { @Override public NodeSet createNewNodeSet() { return new MutableNodeSet(graph); } @Override public NodeSet createNewNodeSet(int[] members) { return new MutableNodeSet(graph, members); } @Test public void testAdd() { int[] members = { 0, 1, 4, 3, 3, 4 }; boolean[] success = { true, true, true, true, false, false }; double[] boundaryEdgeWeights = { 18.0, 19.0, 26.0, 25.0, 25.0, 25.0 }; double[] internalEdgeWeights = { 0.0, 1.0, 1.0, 15.0, 15.0, 15.0 }; int[][] externalBoundaryNodes = { {1, 2, 3}, {2, 3}, {2, 3, 6}, {2, 5, 6}, {2, 5, 6}, {2, 5, 6} }; MutableNodeSet nodeSet = (MutableNodeSet)createNewNodeSet(); assertEquals(0.0, nodeSet.getTotalBoundaryEdgeWeight(), 1e-6); assertEquals(0.0, nodeSet.getTotalInternalEdgeWeight(), 1e-6); assertArrayEquals(new int[] {}, nodeSet.getExternalBoundaryNodes()); for (int i = 0; i < members.length; i++) { assertEquals(success[i], nodeSet.add(members[i])); assertEquals(boundaryEdgeWeights[i], nodeSet.getTotalBoundaryEdgeWeight(), 1e-6); assertEquals(internalEdgeWeights[i], nodeSet.getTotalInternalEdgeWeight(), 1e-6); assertArrayEquals(externalBoundaryNodes[i], nodeSet.getExternalBoundaryNodes()); } } @Test public void testClear() { int[] members = { 1, 2, 3, 4 }; MutableNodeSet nodeSet = (MutableNodeSet)createNewNodeSet(members); assertEquals(4, nodeSet.size()); nodeSet.clear(); assertEquals(0, nodeSet.size()); assertEquals(0.0, nodeSet.getTotalBoundaryEdgeWeight(), 1e-6); assertEquals(0.0, nodeSet.getTotalInternalEdgeWeight(), 1e-6); } @Test public void testFreeze() { int[] members = { 1, 2, 3, 4 }; MutableNodeSet nodeSet = (MutableNodeSet)createNewNodeSet(members); NodeSet frozenNodeSet = nodeSet.freeze(); assertEquals(nodeSet.members, frozenNodeSet.members); assertEquals(nodeSet.getTotalBoundaryEdgeWeight(), frozenNodeSet.getTotalBoundaryEdgeWeight(), 1e-6); assertEquals(nodeSet.getTotalInternalEdgeWeight(), frozenNodeSet.getTotalInternalEdgeWeight(), 1e-6); assertEquals(nodeSet.size(), frozenNodeSet.size()); assertNotSame(nodeSet, frozenNodeSet); assertTrue(nodeSet.equals(frozenNodeSet)); } @Test public void testRemove() { int[] startMembers = { 0, 1, 3, 5, 6 }; int[] members = { 0, 4, 6, 1, 5, 5, 3 }; boolean[] success = { true, false, true, true, true, false, true }; double[] boundaryEdgeWeights = { 24.0, 24.0, 25.0, 26.0, 27.0, 27.0, 0.0 }; double[] internalEdgeWeights = { 13.0, 13.0, 8.0, 6.0, 0.0, 0.0, 0.0 }; int[][] externalBoundaryNodes = { {0, 2, 4}, {0, 2, 4}, {0, 2, 4, 6}, {0, 1, 2, 4, 6}, {0, 1, 2, 4, 5}, {0, 1, 2, 4, 5}, {} }; MutableNodeSet nodeSet = (MutableNodeSet)createNewNodeSet(startMembers); assertEquals(22.0, nodeSet.getTotalBoundaryEdgeWeight(), 1e-6); assertEquals(23.0, nodeSet.getTotalInternalEdgeWeight(), 1e-6); assertArrayEquals(new int[] { 2, 4 }, nodeSet.getExternalBoundaryNodes()); for (int i = 0; i < members.length; i++) { assertEquals(success[i], nodeSet.remove(members[i])); assertEquals(boundaryEdgeWeights[i], nodeSet.getTotalBoundaryEdgeWeight(), 1e-6); assertEquals(internalEdgeWeights[i], nodeSet.getTotalInternalEdgeWeight(), 1e-6); assertArrayEquals(externalBoundaryNodes[i], nodeSet.getExternalBoundaryNodes()); } } }