package i5.las2peer.services.ocd.benchmarks; import static org.junit.Assert.assertEquals; import org.junit.Test; import org.la4j.matrix.Matrix; import i5.las2peer.services.ocd.graphs.Cover; import i5.las2peer.services.ocd.graphs.CustomGraph; import i5.las2peer.services.ocd.testsUtils.OcdTestCoverFactory; import y.base.Edge; import y.base.EdgeCursor; /* * @author YLi */ public class SignedLfrBenchmarkTest { @Test public void testCreateGroundTruth() throws OcdBenchmarkException, InterruptedException { SignedLfrBenchmark model = new SignedLfrBenchmark(100, 3, 6, 0.1, -2.0, -1.0, 10, 40, 5, 2, 0.1, 0.1); Cover cover = model.createGroundTruthCover(); CustomGraph graph = cover.getGraph(); assertEquals(100, graph.nodeCount()); System.out.println(cover.toString()); int nodeCount = graph.nodeCount(); int overlappingNodeCount = 0; int communityCount = cover.communityCount(); Matrix membership = cover.getMemberships(); for (int i = 0; i < nodeCount; i++) { int belongingCommunity = 0; for (int j = 0; j < communityCount; j++) { if (membership.get(i, j) != 0) { belongingCommunity++; } } if (belongingCommunity == 2) { overlappingNodeCount++; } } assertEquals(5, overlappingNodeCount); } @Test public void testSetWeightSign() throws Exception { SignedLfrBenchmark model = new SignedLfrBenchmark(); Cover cover = OcdTestCoverFactory.getLfrUnweightedCover(); Cover signedCover = model.setWeightSign(cover, 0.2, 0.2); CustomGraph graph = signedCover.getGraph(); Matrix membership = cover.getMemberships(); System.out.println(cover.toString()); System.out.println(signedCover.toString()); int communityCount = membership.columns(); EdgeCursor edges = graph.edges(); Edge edge; int negIntraEdgeCount = 0; int posInterEdgeCount = 0; while (edges.ok()) { if (Thread.interrupted()) { throw new InterruptedException(); } edge = edges.edge(); double weight = graph.getEdgeWeight(edge); if (weight < 0) { for (int i = 0; i < communityCount; i++) { if (membership.get(edge.source().index(), i) * membership.get(edge.target().index(), i) != 0) { negIntraEdgeCount++; break; } } } else if (weight > 0) { double sum = 0; for (int i = 0; i < communityCount; i++) { sum = sum + membership.get(edge.source().index(), i) * membership.get(edge.target().index(), i); } if (sum == 0) { posInterEdgeCount++; } } edges.next(); } System.out.println("neg. intra-edges count: " + negIntraEdgeCount); System.out.println("pos. inter-edges count: " + posInterEdgeCount); assertEquals(6, negIntraEdgeCount); assertEquals(1, posInterEdgeCount); } }