DegreeTest.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. use Graphp\Algorithms\Degree as AlgorithmDegree;
  3. use Fhaculty\Graph\Exception\UnderflowException;
  4. use Fhaculty\Graph\Exception\UnexpectedValueException;
  5. use Fhaculty\Graph\Edge\Base as Edge;
  6. use Fhaculty\Graph\Vertex;
  7. use Fhaculty\Graph\Graph;
  8. class DegreeTest extends TestCase
  9. {
  10. public function testGraphEmpty()
  11. {
  12. $graph = new Graph();
  13. $alg = new AlgorithmDegree($graph);
  14. try {
  15. $alg->getDegree();
  16. $this->fail();
  17. }
  18. catch (UnderflowException $e) { }
  19. try {
  20. $alg->getDegreeMin();
  21. $this->fail();
  22. }
  23. catch (UnderflowException $e) { }
  24. try {
  25. $alg->getDegreeMax();
  26. $this->fail();
  27. }
  28. catch (UnderflowException $e) { }
  29. $this->assertTrue($alg->isRegular());
  30. $this->assertTrue($alg->isBalanced());
  31. }
  32. public function testGraphIsolated()
  33. {
  34. $graph = new Graph();
  35. $graph->createVertex(1);
  36. $graph->createVertex(2);
  37. $alg = new AlgorithmDegree($graph);
  38. $this->assertEquals(0, $alg->getDegree());
  39. $this->assertEquals(0, $alg->getDegreeMin());
  40. $this->assertEquals(0, $alg->getDegreeMax());
  41. $this->assertTrue($alg->isRegular());
  42. $this->assertTrue($alg->isBalanced());
  43. }
  44. public function testGraphIrregular()
  45. {
  46. // 1 -> 2 -> 3
  47. $graph = new Graph();
  48. $v1 = $graph->createVertex(1);
  49. $v2 = $graph->createVertex(2);
  50. $v3 = $graph->createVertex(3);
  51. $v1->createEdgeTo($v2);
  52. $v2->createEdgeTo($v3);
  53. $alg = new AlgorithmDegree($graph);
  54. try {
  55. $this->assertEquals(0, $alg->getDegree());
  56. $this->fail();
  57. }
  58. catch (UnexpectedValueException $e) { }
  59. $this->assertEquals(1, $alg->getDegreeMin());
  60. $this->assertEquals(2, $alg->getDegreeMax());
  61. $this->assertFalse($alg->isRegular());
  62. $this->assertFalse($alg->isBalanced());
  63. $this->assertEquals(0, $alg->getDegreeInVertex($v1));
  64. $this->assertEquals(1, $alg->getDegreeOutVertex($v1));
  65. $this->assertEquals(1, $alg->getDegreeVertex($v1));
  66. $this->assertFalse($alg->isVertexIsolated($v1));
  67. $this->assertFalse($alg->isVertexSink($v1));
  68. $this->assertTrue($alg->isVertexSource($v1));
  69. $this->assertEquals(1, $alg->getDegreeInVertex($v2));
  70. $this->assertEquals(1, $alg->getDegreeOutVertex($v2));
  71. $this->assertEquals(2, $alg->getDegreeVertex($v2));
  72. $this->assertFalse($alg->isVertexIsolated($v2));
  73. $this->assertFalse($alg->isVertexSink($v2));
  74. $this->assertFalse($alg->isVertexSource($v2));
  75. $this->assertEquals(1, $alg->getDegreeInVertex($v3));
  76. $this->assertEquals(0, $alg->getDegreeOutVertex($v3));
  77. $this->assertEquals(1, $alg->getDegreeVertex($v3));
  78. $this->assertFalse($alg->isVertexIsolated($v3));
  79. $this->assertTrue($alg->isVertexSink($v3));
  80. $this->assertFalse($alg->isVertexSource($v3));
  81. }
  82. }