TestCalculateStronglyConnectedComponents3()
{
// N components with one vertex each.
const Int32 Vertices = 100;
Int32[] aiVertexIDs = new Int32[Vertices];
for (Int32 i = 0; i < Vertices; i++)
{
aiVertexIDs[i] = m_oVertices.Add().ID;
}
IList<LinkedList<IVertex>> oStronglyConnectedComponents =
m_oConnectedComponentCalculator.
CalculateStronglyConnectedComponents(m_oGraph, true);
Assert.AreEqual(Vertices, oStronglyConnectedComponents.Count);
HashSet<Int32> oFoundVertexIDs = new HashSet<Int32>();
foreach (LinkedList<IVertex> oStronglyConnectedComponent in
oStronglyConnectedComponents)
{
Assert.AreEqual(1, oStronglyConnectedComponent.Count);
Int32 iFoundVertexID = oStronglyConnectedComponent.First.Value.ID;
if (oFoundVertexIDs.Contains(iFoundVertexID))
{
Assert.Fail("Two components contain the same vertex.");
}
oFoundVertexIDs.Add(iFoundVertexID);
}
foreach (Int32 iVertexID in aiVertexIDs)
{
if (!oFoundVertexIDs.Contains(iVertexID))
{
Assert.Fail("A vertex is not contained in a component.");
}
}
}