package i5.las2peer.services.ocd.algorithms;
import static org.junit.Assert.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.junit.Test;
import org.la4j.matrix.Matrix;
import org.la4j.matrix.dense.Basic2DMatrix;
import i5.las2peer.services.ocd.adapters.AdapterException;
import i5.las2peer.services.ocd.algorithms.utils.OcdAlgorithmException;
import i5.las2peer.services.ocd.graphs.Cover;
import i5.las2peer.services.ocd.graphs.CustomGraph;
import i5.las2peer.services.ocd.graphs.GraphProcessor;
import i5.las2peer.services.ocd.testsUtils.OcdTestConstants;
import i5.las2peer.services.ocd.testsUtils.OcdTestGraphFactory;
import y.base.Node;
public class SignedProbabilisticMixtureAlgorithmTest {
@Test
public void testWriteNetworkFile() throws AdapterException, IOException, InterruptedException {
CustomGraph graph = new CustomGraph();
Node n[] = new Node[4];
for (int i = 0; i < 4; i++) {
n[i] = graph.createNode();
}
graph.createEdge(n[0], n[1]);
graph.createEdge(n[0], n[2]);
graph.createEdge(n[2], n[0]);
graph.createEdge(n[2], n[1]);
graph.createEdge(n[1], n[3]);
graph.createEdge(n[2], n[3]);
graph.createEdge(n[3], n[2]);
graph.setEdgeWeight(graph.getEdgeArray()[0], 1);
graph.setEdgeWeight(graph.getEdgeArray()[1], -1);
graph.setEdgeWeight(graph.getEdgeArray()[2], 1);
graph.setEdgeWeight(graph.getEdgeArray()[3], -1);
graph.setEdgeWeight(graph.getEdgeArray()[4], 1);
graph.setEdgeWeight(graph.getEdgeArray()[5], 1);
graph.setEdgeWeight(graph.getEdgeArray()[6], -1);
GraphProcessor processor = new GraphProcessor();
processor.makeUndirected(graph);
SignedProbabilisticMixtureAlgorithm algo = new SignedProbabilisticMixtureAlgorithm();
algo.writeNetworkFile(graph);
}
@Test
public void testGetMembershipMatrix() throws IOException, InterruptedException {
SignedProbabilisticMixtureAlgorithm algo = new SignedProbabilisticMixtureAlgorithm();
/*
* The result file of running SPM on the party network with 10 nodes
*/
File resultFile = new File(OcdTestConstants.spmResultFilePath);
Matrix membershipMatrix = algo.getMembershipMatrix(resultFile, 10);
System.out.println("Test result: membership");
System.out.println(membershipMatrix.toString());
Matrix expectedMatrix = new Basic2DMatrix(10, 2);
expectedMatrix.set(0, 0, 0);
expectedMatrix.set(0, 1, 1);
expectedMatrix.set(1, 0, 0);
expectedMatrix.set(1, 1, 1);
expectedMatrix.set(2, 0, 0);
expectedMatrix.set(2, 1, 1);
expectedMatrix.set(3, 0, 0);
expectedMatrix.set(3, 1, 1);
expectedMatrix.set(4, 0, 0.0171821306);
expectedMatrix.set(4, 1, 0.9828178694);
expectedMatrix.set(5, 0, 1);
expectedMatrix.set(5, 1, 0);
expectedMatrix.set(6, 0, 1);
expectedMatrix.set(6, 1, 0);
expectedMatrix.set(7, 0, 1);
expectedMatrix.set(7, 1, 0);
expectedMatrix.set(8, 0, 1);
expectedMatrix.set(8, 1, 0);
expectedMatrix.set(9, 0, 1);
expectedMatrix.set(9, 1, 0);
assertEquals(expectedMatrix, membershipMatrix);
}
@Test
public void testDetectOverlappingCommunities()
throws FileNotFoundException, AdapterException, OcdAlgorithmException, InterruptedException {
CustomGraph graph = OcdTestGraphFactory.getSignedLfrGraph();
SignedProbabilisticMixtureAlgorithm algo = new SignedProbabilisticMixtureAlgorithm();
GraphProcessor processor = new GraphProcessor();
processor.makeUndirected(graph);
Cover cover = algo.detectOverlappingCommunities(graph);
System.out.println("Detected Cover:");
System.out.println(cover.toString());
}
}