/**
  * @covers \Gliph\Algorithm\ConnectedComponent::tarjan_scc()
  */
 public function testTarjanScc()
 {
     $a = new TestVertex('a');
     $b = new TestVertex('b');
     $c = new TestVertex('c');
     $d = new TestVertex('d');
     $e = new TestVertex('e');
     $f = new TestVertex('f');
     $g = new TestVertex('g');
     $h = new TestVertex('h');
     $graph = new DirectedAdjacencyList();
     $graph->addDirectedEdge($a, $d);
     $graph->addDirectedEdge($a, $b);
     $graph->addDirectedEdge($b, $c);
     $graph->addDirectedEdge($c, $d);
     $graph->addDirectedEdge($d, $a);
     $graph->addDirectedEdge($e, $d);
     $graph->addDirectedEdge($f, $g);
     $graph->addDirectedEdge($g, $h);
     $graph->addDirectedEdge($h, $f);
     $visitor = ConnectedComponent::tarjan_scc($graph);
     $expected_full = array(array($c, $b, $d, $a), array($e), array($h, $g, $f));
     $this->assertEquals($expected_full, $visitor->getComponents());
     $expected_full = array(array($c, $b, $d, $a), array($h, $g, $f));
     $this->assertEquals($expected_full, $visitor->getConnectedComponents());
 }
 /**
  * {@inheritdoc}
  */
 public function getCycles()
 {
     $scc = ConnectedComponent::tarjan_scc($this);
     return $scc->getConnectedComponents();
 }