Changeset View
Changeset View
Standalone View
Standalone View
java/src/test/java/org/softwareheritage/graph/SubgraphTest.java
package org.softwareheritage.graph; | package org.softwareheritage.graph; | ||||
import java.util.*; | import java.util.*; | ||||
import org.junit.jupiter.api.Assertions; | import org.junit.jupiter.api.Assertions; | ||||
import org.junit.jupiter.api.Test; | import org.junit.jupiter.api.Test; | ||||
public class SubgraphTest extends GraphTest { | public class SubgraphTest extends GraphTest { | ||||
@Test | @Test | ||||
public void noFilter() { | public void noFilter() { | ||||
Graph g = getGraph(); | SwhBidirectionalGraph g = getGraph(); | ||||
Subgraph sg = new Subgraph(g, new AllowedNodes("*")); | Subgraph sg = new Subgraph(g, new AllowedNodes("*")); | ||||
for (long i = 0; i < g.numNodes(); ++i) { | for (long i = 0; i < g.numNodes(); ++i) { | ||||
Assertions.assertEquals(g.outdegree(i), sg.outdegree(i)); | Assertions.assertEquals(g.outdegree(i), sg.outdegree(i)); | ||||
} | } | ||||
} | } | ||||
@Test | @Test | ||||
public void missingNode() { | public void missingNode() { | ||||
Graph g = getGraph(); | SwhBidirectionalGraph g = getGraph(); | ||||
Subgraph sg = new Subgraph(g, new AllowedNodes("dir,ori")); | Subgraph sg = new Subgraph(g, new AllowedNodes("dir,ori")); | ||||
SWHID rev1 = fakeSWHID("rev", 18); | SWHID rev1 = fakeSWHID("rev", 18); | ||||
Assertions.assertThrows(IllegalArgumentException.class, () -> { | Assertions.assertThrows(IllegalArgumentException.class, () -> { | ||||
sg.outdegree(sg.getNodeId(rev1)); | sg.outdegree(sg.getNodeId(rev1)); | ||||
}); | }); | ||||
Assertions.assertThrows(IllegalArgumentException.class, () -> { | Assertions.assertThrows(IllegalArgumentException.class, () -> { | ||||
sg.successors(sg.getNodeId(rev1)); | sg.successors(sg.getNodeId(rev1)); | ||||
}); | }); | ||||
} | } | ||||
@Test | @Test | ||||
public void outdegreeOnlyDirOri() { | public void outdegreeOnlyDirOri() { | ||||
Graph g = getGraph(); | SwhBidirectionalGraph g = getGraph(); | ||||
Subgraph sg = new Subgraph(g, new AllowedNodes("dir,ori")); | Subgraph sg = new Subgraph(g, new AllowedNodes("dir,ori")); | ||||
SWHID dir1 = fakeSWHID("dir", 17); | SWHID dir1 = fakeSWHID("dir", 17); | ||||
Assertions.assertEquals(2, g.outdegree(g.getNodeId(dir1))); | Assertions.assertEquals(2, g.outdegree(g.getNodeId(dir1))); | ||||
Assertions.assertEquals(1, sg.outdegree(sg.getNodeId(dir1))); | Assertions.assertEquals(1, sg.outdegree(sg.getNodeId(dir1))); | ||||
SWHID dir2 = fakeSWHID("dir", 6); | SWHID dir2 = fakeSWHID("dir", 6); | ||||
Assertions.assertEquals(2, g.outdegree(g.getNodeId(dir2))); | Assertions.assertEquals(2, g.outdegree(g.getNodeId(dir2))); | ||||
Assertions.assertEquals(0, sg.outdegree(sg.getNodeId(dir2))); | Assertions.assertEquals(0, sg.outdegree(sg.getNodeId(dir2))); | ||||
SWHID ori1 = fakeSWHID("ori", 21); | SWHID ori1 = fakeSWHID("ori", 21); | ||||
Assertions.assertEquals(1, g.outdegree(g.getNodeId(ori1))); | Assertions.assertEquals(1, g.outdegree(g.getNodeId(ori1))); | ||||
Assertions.assertEquals(0, sg.outdegree(sg.getNodeId(ori1))); | Assertions.assertEquals(0, sg.outdegree(sg.getNodeId(ori1))); | ||||
} | } | ||||
@Test | @Test | ||||
public void successorsOnlyDirOri() { | public void successorsOnlyDirOri() { | ||||
Graph g = getGraph(); | SwhBidirectionalGraph g = getGraph(); | ||||
Subgraph sg = new Subgraph(g, new AllowedNodes("dir,ori")); | Subgraph sg = new Subgraph(g, new AllowedNodes("dir,ori")); | ||||
SWHID dir1 = fakeSWHID("dir", 17); | SWHID dir1 = fakeSWHID("dir", 17); | ||||
assertEqualsAnyOrder(Collections.singletonList(sg.getNodeId(fakeSWHID("dir", 16))), | assertEqualsAnyOrder(Collections.singletonList(sg.getNodeId(fakeSWHID("dir", 16))), | ||||
lazyLongIteratorToList(sg.successors(sg.getNodeId(dir1)))); | lazyLongIteratorToList(sg.successors(sg.getNodeId(dir1)))); | ||||
SWHID dir2 = fakeSWHID("dir", 6); | SWHID dir2 = fakeSWHID("dir", 6); | ||||
assertEqualsAnyOrder(Collections.emptyList(), lazyLongIteratorToList(sg.successors(sg.getNodeId(dir2)))); | assertEqualsAnyOrder(Collections.emptyList(), lazyLongIteratorToList(sg.successors(sg.getNodeId(dir2)))); | ||||
SWHID ori1 = fakeSWHID("ori", 21); | SWHID ori1 = fakeSWHID("ori", 21); | ||||
assertEqualsAnyOrder(Collections.emptyList(), lazyLongIteratorToList(sg.successors(sg.getNodeId(ori1)))); | assertEqualsAnyOrder(Collections.emptyList(), lazyLongIteratorToList(sg.successors(sg.getNodeId(ori1)))); | ||||
} | } | ||||
@Test | @Test | ||||
public void nodeIteratorOnlyOriDir() { | public void nodeIteratorOnlyOriDir() { | ||||
Graph g = getGraph(); | SwhBidirectionalGraph g = getGraph(); | ||||
Subgraph sg = new Subgraph(g, new AllowedNodes("dir,ori")); | Subgraph sg = new Subgraph(g, new AllowedNodes("dir,ori")); | ||||
ArrayList<Long> nodeList = new ArrayList<>(); | ArrayList<Long> nodeList = new ArrayList<>(); | ||||
Iterator<Long> nodeIt = sg.nodeIterator(); | Iterator<Long> nodeIt = sg.nodeIterator(); | ||||
nodeIt.forEachRemaining(nodeList::add); | nodeIt.forEachRemaining(nodeList::add); | ||||
assertEqualsAnyOrder(Arrays.asList(sg.getNodeId(fakeSWHID("ori", 21)), sg.getNodeId(fakeSWHID("dir", 2)), | assertEqualsAnyOrder(Arrays.asList(sg.getNodeId(fakeSWHID("ori", 21)), sg.getNodeId(fakeSWHID("dir", 2)), | ||||
sg.getNodeId(fakeSWHID("dir", 6)), sg.getNodeId(fakeSWHID("dir", 8)), | sg.getNodeId(fakeSWHID("dir", 6)), sg.getNodeId(fakeSWHID("dir", 8)), | ||||
sg.getNodeId(fakeSWHID("dir", 12)), sg.getNodeId(fakeSWHID("dir", 16)), | sg.getNodeId(fakeSWHID("dir", 12)), sg.getNodeId(fakeSWHID("dir", 16)), | ||||
sg.getNodeId(fakeSWHID("dir", 17))), nodeList); | sg.getNodeId(fakeSWHID("dir", 17))), nodeList); | ||||
sg = new Subgraph(g, new AllowedNodes("snp,rel")); | sg = new Subgraph(g, new AllowedNodes("snp,rel")); | ||||
nodeList = new ArrayList<>(); | nodeList = new ArrayList<>(); | ||||
nodeIt = sg.nodeIterator(); | nodeIt = sg.nodeIterator(); | ||||
nodeIt.forEachRemaining(nodeList::add); | nodeIt.forEachRemaining(nodeList::add); | ||||
assertEqualsAnyOrder(Arrays.asList(sg.getNodeId(fakeSWHID("snp", 20)), sg.getNodeId(fakeSWHID("rel", 10)), | assertEqualsAnyOrder(Arrays.asList(sg.getNodeId(fakeSWHID("snp", 20)), sg.getNodeId(fakeSWHID("rel", 10)), | ||||
sg.getNodeId(fakeSWHID("rel", 19))), nodeList); | sg.getNodeId(fakeSWHID("rel", 19))), nodeList); | ||||
} | } | ||||
} | } |