TestCalculateGraphMetrics4()
{
// Directed graph, more complex.
Boolean bIsDirected = true;
CreateGraph(bIsDirected);
IVertex oVertexA = m_oVertices.Add();
IVertex oVertexB = m_oVertices.Add();
IVertex oVertexC = m_oVertices.Add();
IVertex oVertexD = m_oVertices.Add();
IVertex oVertexE = m_oVertices.Add();
IEdge oEdge1 = m_oEdges.Add(oVertexA, oVertexA, bIsDirected);
IEdge oEdge2 = m_oEdges.Add(oVertexA, oVertexB, bIsDirected);
IEdge oEdge3 = m_oEdges.Add(oVertexB, oVertexA, bIsDirected);
IEdge oEdge4 = m_oEdges.Add(oVertexB, oVertexA, bIsDirected);
IEdge oEdge5 = m_oEdges.Add(oVertexB, oVertexD, bIsDirected);
IEdge oEdge6 = m_oEdges.Add(oVertexB, oVertexD, bIsDirected);
IEdge oEdge7 = m_oEdges.Add(oVertexD, oVertexD, bIsDirected);
IEdge oEdge8 = m_oEdges.Add(oVertexD, oVertexC, bIsDirected);
IEdge oEdge9 = m_oEdges.Add(oVertexD, oVertexC, bIsDirected);
IEdge oEdge10 = m_oEdges.Add(oVertexC, oVertexD, bIsDirected);
IEdge oEdge11 = m_oEdges.Add(oVertexC, oVertexD, bIsDirected);
IEdge oEdge12 = m_oEdges.Add(oVertexD, oVertexE, bIsDirected);
IDictionary<Int32, Boolean> oReciprocationFlags =
m_oEdgeReciprocationCalculator.CalculateGraphMetrics(m_oGraph);
Assert.AreEqual(12, oReciprocationFlags.Count);
Assert.IsFalse(oReciprocationFlags[oEdge1.ID]);
Assert.IsTrue(oReciprocationFlags[oEdge2.ID]);
Assert.IsTrue(oReciprocationFlags[oEdge3.ID]);
Assert.IsTrue(oReciprocationFlags[oEdge4.ID]);
Assert.IsFalse(oReciprocationFlags[oEdge5.ID]);
Assert.IsFalse(oReciprocationFlags[oEdge6.ID]);
Assert.IsFalse(oReciprocationFlags[oEdge7.ID]);
Assert.IsTrue(oReciprocationFlags[oEdge8.ID]);
Assert.IsTrue(oReciprocationFlags[oEdge9.ID]);
Assert.IsTrue(oReciprocationFlags[oEdge10.ID]);
Assert.IsTrue(oReciprocationFlags[oEdge11.ID]);
Assert.IsFalse(oReciprocationFlags[oEdge12.ID]);
}