basicgraph.php

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 183 行

PHP
183
字号
<?php/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */// +-----------------------------------------------------------------------------+// | Copyright (c) 2003 S閞gio Gon鏰lves Carvalho                                |// +-----------------------------------------------------------------------------+// | This file is part of Structures_Graph.                                      |// |                                                                             |// | Structures_Graph is free software; you can redistribute it and/or modify    |// | it under the terms of the GNU Lesser General Public License as published by |// | the Free Software Foundation; either version 2.1 of the License, or         |// | (at your option) any later version.                                         |// |                                                                             |// | Structures_Graph is distributed in the hope that it will be useful,         |// | but WITHOUT ANY WARRANTY; without even the implied warranty of              |// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |// | GNU Lesser General Public License for more details.                         |// |                                                                             |// | You should have received a copy of the GNU Lesser General Public License    |// | along with Structures_Graph; if not, write to the Free Software             |// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA                    |// | 02111-1307 USA                                                              |// +-----------------------------------------------------------------------------+// | Author: S閞gio Carvalho <sergio.carvalho@portugalmail.com>                  |// +-----------------------------------------------------------------------------+//require_once 'Structures/Graph.php';require_once 'PHPUnit.php';/** * @access private */class BasicGraph extends PHPUnit_TestCase{    var $_graph = null;    // constructor of the test suite    function StringTest($name) {       $this->PHPUnit_TestCase($name);    }    function setUp() {    }    function tearDown() {    }    function test_create_graph() {        $this->_graph = new Structures_Graph();        $this->assertTrue(is_a($this->_graph, 'Structures_Graph'));     }    function test_add_node() {        $this->_graph = new Structures_Graph();        $data = 1;        $node = new Structures_Graph_Node($data);        $this->_graph->addNode($node);        $node = new Structures_Graph_Node($data);        $this->_graph->addNode($node);        $node = new Structures_Graph_Node($data);        $this->_graph->addNode($node);    }    function test_connect_node() {        $this->_graph = new Structures_Graph();        $data = 1;        $node1 = new Structures_Graph_Node($data);        $node2 = new Structures_Graph_Node($data);        $this->_graph->addNode($node1);        $this->_graph->addNode($node2);        $node1->connectTo($node2);        $node =& $this->_graph->getNodes();        $node =& $node[0];        $node = $node->getNeighbours();        $node =& $node[0];        /*          ZE1 == and === operators fail on $node,$node2 because of the recursion introduced         by the _graph field in the Node object. So, we'll use the stupid method for reference         testing        */        $node = true;        $this->assertTrue($node2);        $node = false;        $this->assertFalse($node2);    }    function test_data_references() {        $this->_graph = new Structures_Graph();        $data = 1;        $node = new Structures_Graph_Node();        $node->setData(&$data);        $this->_graph->addNode($node);        $data = 2;        $dataInNode =& $this->_graph->getNodes();        $dataInNode =& $dataInNode[0];        $dataInNode =& $dataInNode->getData();        $this->assertTrue($data === $dataInNode);    }    function test_metadata_references() {        $this->_graph = new Structures_Graph();        $data = 1;        $node = new Structures_Graph_Node();        $node->setMetadata('5', &$data);        $data = 2;        $dataInNode =& $node->getMetadata('5');        $this->assertTrue($data === $dataInNode);    }       function test_metadata_key_exists() {        $this->_graph = new Structures_Graph();        $data = 1;        $node = new Structures_Graph_Node();        $node->setMetadata('5', $data);        $this->assertTrue($node->metadataKeyExists('5'));        $this->assertFalse($node->metadataKeyExists('1'));    }    function test_directed_degree() {        $this->_graph = new Structures_Graph(true);        $node = array();        $node[] = new Structures_Graph_Node();        $node[] = new Structures_Graph_Node();        $node[] = new Structures_Graph_Node();        $this->_graph->addNode($node[0]);        $this->_graph->addNode($node[1]);        $this->_graph->addNode($node[2]);        $this->assertEquals(0, $node[0]->inDegree(), 'inDegree test failed for node 0 with 0 arcs');        $this->assertEquals(0, $node[1]->inDegree(), 'inDegree test failed for node 1 with 0 arcs');        $this->assertEquals(0, $node[2]->inDegree(), 'inDegree test failed for node 2 with 0 arcs');        $this->assertEquals(0, $node[0]->outDegree(), 'outDegree test failed for node 0 with 0 arcs');        $this->assertEquals(0, $node[1]->outDegree(), 'outDegree test failed for node 1 with 0 arcs');        $this->assertEquals(0, $node[2]->outDegree(), 'outDegree test failed for node 2 with 0 arcs');        $node[0]->connectTo($node[1]);        $this->assertEquals(0, $node[0]->inDegree(), 'inDegree test failed for node 0 with 1 arc');        $this->assertEquals(1, $node[1]->inDegree(), 'inDegree test failed for node 1 with 1 arc');        $this->assertEquals(0, $node[2]->inDegree(), 'inDegree test failed for node 2 with 1 arc');        $this->assertEquals(1, $node[0]->outDegree(), 'outDegree test failed for node 0 with 1 arc');        $this->assertEquals(0, $node[1]->outDegree(), 'outDegree test failed for node 1 with 1 arc');        $this->assertEquals(0, $node[2]->outDegree(), 'outDegree test failed for node 2 with 1 arc');        $node[0]->connectTo($node[2]);        $this->assertEquals(0, $node[0]->inDegree(), 'inDegree test failed for node 0 with 2 arcs');        $this->assertEquals(1, $node[1]->inDegree(), 'inDegree test failed for node 1 with 2 arcs');        $this->assertEquals(1, $node[2]->inDegree(), 'inDegree test failed for node 2 with 2 arcs');        $this->assertEquals(2, $node[0]->outDegree(), 'outDegree test failed for node 0 with 2 arcs');        $this->assertEquals(0, $node[1]->outDegree(), 'outDegree test failed for node 1 with 2 arcs');        $this->assertEquals(0, $node[2]->outDegree(), 'outDegree test failed for node 2 with 2 arcs');    }    function test_undirected_degree() {        $this->_graph = new Structures_Graph(false);        $node = array();        $node[] = new Structures_Graph_Node();        $node[] = new Structures_Graph_Node();        $node[] = new Structures_Graph_Node();        $this->_graph->addNode($node[0]);        $this->_graph->addNode($node[1]);        $this->_graph->addNode($node[2]);        $this->assertEquals(0, $node[0]->inDegree(), 'inDegree test failed for node 0 with 0 arcs');        $this->assertEquals(0, $node[1]->inDegree(), 'inDegree test failed for node 1 with 0 arcs');        $this->assertEquals(0, $node[2]->inDegree(), 'inDegree test failed for node 2 with 0 arcs');        $this->assertEquals(0, $node[0]->outDegree(), 'outDegree test failed for node 0 with 0 arcs');        $this->assertEquals(0, $node[1]->outDegree(), 'outDegree test failed for node 1 with 0 arcs');        $this->assertEquals(0, $node[2]->outDegree(), 'outDegree test failed for node 2 with 0 arcs');        $node[0]->connectTo($node[1]);        $this->assertEquals(1, $node[0]->inDegree(), 'inDegree test failed for node 0 with 1 arc');        $this->assertEquals(1, $node[1]->inDegree(), 'inDegree test failed for node 1 with 1 arc');        $this->assertEquals(0, $node[2]->inDegree(), 'inDegree test failed for node 2 with 1 arc');        $this->assertEquals(1, $node[0]->outDegree(), 'outDegree test failed for node 0 with 1 arc');        $this->assertEquals(1, $node[1]->outDegree(), 'outDegree test failed for node 1 with 1 arc');        $this->assertEquals(0, $node[2]->outDegree(), 'outDegree test failed for node 2 with 1 arc');        $node[0]->connectTo($node[2]);        $this->assertEquals(2, $node[0]->inDegree(), 'inDegree test failed for node 0 with 2 arcs');        $this->assertEquals(1, $node[1]->inDegree(), 'inDegree test failed for node 1 with 2 arcs');        $this->assertEquals(1, $node[2]->inDegree(), 'inDegree test failed for node 2 with 2 arcs');        $this->assertEquals(2, $node[0]->outDegree(), 'outDegree test failed for node 0 with 2 arcs');        $this->assertEquals(1, $node[1]->outDegree(), 'outDegree test failed for node 1 with 2 arcs');        $this->assertEquals(1, $node[2]->outDegree(), 'outDegree test failed for node 2 with 2 arcs');    }}?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?