public function testGraphIrregular() { // 1 -> 2 -> 3 $graph = new Graph(); $v1 = $graph->createVertex(1); $v2 = $graph->createVertex(2); $v3 = $graph->createVertex(3); $v1->createEdgeTo($v2); $v2->createEdgeTo($v3); $alg = new AlgorithmDegree($graph); try { $this->assertEquals(0, $alg->getDegree()); $this->fail(); } catch (UnexpectedValueException $e) { } $this->assertEquals(1, $alg->getDegreeMin()); $this->assertEquals(2, $alg->getDegreeMax()); $this->assertFalse($alg->isRegular()); $this->assertFalse($alg->isBalanced()); $this->assertEquals(0, $alg->getDegreeInVertex($v1)); $this->assertEquals(1, $alg->getDegreeOutVertex($v1)); $this->assertEquals(1, $alg->getDegreeVertex($v1)); $this->assertFalse($alg->isVertexIsolated($v1)); $this->assertFalse($alg->isVertexSink($v1)); $this->assertTrue($alg->isVertexSource($v1)); $this->assertEquals(1, $alg->getDegreeInVertex($v2)); $this->assertEquals(1, $alg->getDegreeOutVertex($v2)); $this->assertEquals(2, $alg->getDegreeVertex($v2)); $this->assertFalse($alg->isVertexIsolated($v2)); $this->assertFalse($alg->isVertexSink($v2)); $this->assertFalse($alg->isVertexSource($v2)); $this->assertEquals(1, $alg->getDegreeInVertex($v3)); $this->assertEquals(0, $alg->getDegreeOutVertex($v3)); $this->assertEquals(1, $alg->getDegreeVertex($v3)); $this->assertFalse($alg->isVertexIsolated($v3)); $this->assertTrue($alg->isVertexSink($v3)); $this->assertFalse($alg->isVertexSource($v3)); }
/** * check whether this graph has an eulerian cycle * * @return boolean * @uses ConnectedComponents::isSingle() * @uses Degree::getDegreeVertex() * @todo isolated vertices should be ignored * @todo definition is only valid for undirected graphs */ public function hasCycle() { $components = new ConnectedComponents($this->graph); if ($components->isSingle()) { $alg = new Degree($this->graph); foreach ($this->graph->getVertices() as $vertex) { // uneven degree => fail if ($alg->getDegreeVertex($vertex) & 1) { return false; } } return true; } return false; }