TestCalculateStronglyConnectedComponents8()
{
// Test component sorting when layout sort order is specified.
IVertex[] aoVertices = new IVertex[14];
for (Int32 i = 0; i < aoVertices.Length; i++)
{
IVertex oVertex = m_oVertices.Add();
// Make sure that sorting can handle a missing key. They key is
// optional.
if (i != 12)
{
oVertex.SetValue(ReservedMetadataKeys.SortableLayoutAndZOrder,
(Single)i);
}
aoVertices[i] = oVertex;
}
m_oGraph.SetValue(ReservedMetadataKeys.SortableLayoutAndZOrderSet,
null);
// Each group of Add() calls here is a strongly connected component.
m_oEdges.Add(aoVertices[6], aoVertices[7]);
m_oEdges.Add(aoVertices[4], aoVertices[5]);
m_oEdges.Add(aoVertices[2], aoVertices[3]);
m_oEdges.Add(aoVertices[13], aoVertices[12]);
m_oEdges.Add(aoVertices[13], aoVertices[11]);
m_oEdges.Add(aoVertices[10], aoVertices[9]);
m_oEdges.Add(aoVertices[10], aoVertices[8]);
IList<LinkedList<IVertex>> oStronglyConnectedComponents =
m_oConnectedComponentCalculator.
CalculateStronglyConnectedComponents(m_oGraph, true);
Assert.AreEqual(7, oStronglyConnectedComponents.Count);
CheckThatComponentConsistsOfVertices(oStronglyConnectedComponents[0],
new Int32[] { aoVertices[0].ID });
CheckThatComponentConsistsOfVertices(oStronglyConnectedComponents[1],
new Int32[] { aoVertices[1].ID });
CheckThatComponentConsistsOfVertices(oStronglyConnectedComponents[2],
new Int32[] { aoVertices[2].ID, aoVertices[3].ID });
CheckThatComponentConsistsOfVertices(oStronglyConnectedComponents[3],
new Int32[] { aoVertices[4].ID, aoVertices[5].ID });
CheckThatComponentConsistsOfVertices(oStronglyConnectedComponents[4],
new Int32[] { aoVertices[6].ID, aoVertices[7].ID });
CheckThatComponentConsistsOfVertices(oStronglyConnectedComponents[5],
new Int32[]{aoVertices[8].ID, aoVertices[9].ID,
aoVertices[10].ID});
CheckThatComponentConsistsOfVertices(oStronglyConnectedComponents[6],
new Int32[]{aoVertices[11].ID, aoVertices[12].ID,
aoVertices[13].ID});
}