package uk.ac.rhul.cs.cl1.merging; import static org.junit.Assert.*; import org.junit.Test; import uk.ac.rhul.cs.cl1.NodeSet; import uk.ac.rhul.cs.cl1.ValuedNodeSet; import uk.ac.rhul.cs.cl1.ValuedNodeSetList; import uk.ac.rhul.cs.cl1.merging.MultiPassNodeSetMerger; import uk.ac.rhul.cs.cl1.similarity.JaccardSimilarity; import uk.ac.rhul.cs.cl1.similarity.SimilarityFunction; import uk.ac.rhul.cs.graph.Graph; public class MultiPassNodeSetMergerTest { Graph graph = new Graph(); @Test public void testMergeOverlapping() { for (int i = 0; i < 17; i++) graph.createNode(Integer.toString(i)); ValuedNodeSetList nodeSets = new ValuedNodeSetList(); nodeSets.add(new ValuedNodeSet(graph, 0, 1, 2, 3, 4, 5)); nodeSets.add(new ValuedNodeSet(graph, 4, 5, 6, 7, 8)); nodeSets.add(new ValuedNodeSet(graph, 3, 4, 5, 6, 7, 8, 9, 10, 11)); nodeSets.add(new ValuedNodeSet(graph, 3, 4, 5)); nodeSets.add(new ValuedNodeSet(graph, 12, 13)); nodeSets.add(new ValuedNodeSet(graph, 13, 14)); nodeSets.add(new ValuedNodeSet(graph, 15, 16)); SimilarityFunction<NodeSet> similarityFunc = new JaccardSimilarity<NodeSet>(); double threshold = 0.3; MultiPassNodeSetMerger merger = new MultiPassNodeSetMerger(); merger.setVerificationMode(MultiPassNodeSetMerger.VerificationMode.VERIFY); // merger.setDebugging(true); ValuedNodeSetList mergedNodeSets; mergedNodeSets = merger.mergeOverlapping(nodeSets, similarityFunc, threshold); assertEquals(4, mergedNodeSets.size()); assertTrue(mergedNodeSets.contains(new ValuedNodeSet(graph, 3, 4, 5, 6, 7, 8, 9, 10, 11))); assertTrue(mergedNodeSets.contains(new ValuedNodeSet(graph, 0, 1, 2, 3, 4, 5))); assertTrue(mergedNodeSets.contains(new ValuedNodeSet(graph, 12, 13, 14))); assertTrue(mergedNodeSets.contains(new ValuedNodeSet(graph, 15, 16))); } @Test public void testMergeOverlapping2() { // More pathological test case for (int i = 0; i < 17; i++) graph.createNode(Integer.toString(i)); ValuedNodeSetList nodeSets = new ValuedNodeSetList(); nodeSets.add(new ValuedNodeSet(graph, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)); nodeSets.add(new ValuedNodeSet(graph, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14)); nodeSets.add(new ValuedNodeSet(graph, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14)); nodeSets.add(new ValuedNodeSet(graph, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14)); SimilarityFunction<NodeSet> similarityFunc = new JaccardSimilarity<NodeSet>(); double threshold = 0.3; MultiPassNodeSetMerger merger = new MultiPassNodeSetMerger(); merger.setVerificationMode(MultiPassNodeSetMerger.VerificationMode.VERIFY); // merger.setDebugging(true); ValuedNodeSetList mergedNodeSets; mergedNodeSets = merger.mergeOverlapping(nodeSets, similarityFunc, threshold); assertEquals(1, mergedNodeSets.size()); assertTrue(mergedNodeSets.contains(new ValuedNodeSet(graph, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14))); } @Test public void testMergeOverlapping3() { // Even more pathological test case for (int i = 0; i < 16; i++) graph.createNode(Integer.toString(i)); ValuedNodeSetList nodeSets = new ValuedNodeSetList(); nodeSets.add(new ValuedNodeSet(graph, 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14)); nodeSets.add(new ValuedNodeSet(graph, 0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14)); nodeSets.add(new ValuedNodeSet(graph, 0, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15)); SimilarityFunction<NodeSet> similarityFunc = new JaccardSimilarity<NodeSet>(); double threshold = 0.8; MultiPassNodeSetMerger merger = new MultiPassNodeSetMerger(); merger.setVerificationMode(MultiPassNodeSetMerger.VerificationMode.VERIFY); // merger.setDebugging(true); ValuedNodeSetList mergedNodeSets; mergedNodeSets = merger.mergeOverlapping(nodeSets, similarityFunc, threshold); assertEquals(1, mergedNodeSets.size()); assertTrue(mergedNodeSets.contains(new ValuedNodeSet(graph, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15))); } }