mirror of https://gitlab.com/pamhyr/pamhyr2
Network: Add tests and minor change.
parent
76ab3114f0
commit
7fd570c5a7
|
|
@ -48,11 +48,15 @@ class Graph(object):
|
||||||
|
|
||||||
def enable_edges(self):
|
def enable_edges(self):
|
||||||
return list(
|
return list(
|
||||||
filter(
|
self._enable_edges()
|
||||||
|
)
|
||||||
|
|
||||||
|
def _enable_edges(self):
|
||||||
|
"""Return a generator"""
|
||||||
|
return filter(
|
||||||
lambda e: e.is_enable(),
|
lambda e: e.is_enable(),
|
||||||
self._edges
|
self._edges
|
||||||
)
|
)
|
||||||
)
|
|
||||||
|
|
||||||
def edges_names(self):
|
def edges_names(self):
|
||||||
return list(map(lambda e: e.name, self._edges))
|
return list(map(lambda e: e.name, self._edges))
|
||||||
|
|
@ -138,8 +142,20 @@ class Graph(object):
|
||||||
self._nodes
|
self._nodes
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
self._remove_associated_edge(node_name)
|
||||||
self._status.modified()
|
self._status.modified()
|
||||||
|
|
||||||
|
def _remove_associated_edge(self, node_name: str):
|
||||||
|
edges = list(
|
||||||
|
filter(
|
||||||
|
lambda e: (e.node1.name == node_name or
|
||||||
|
e.node2.name == node_name),
|
||||||
|
self._edges,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
for edge in edges:
|
||||||
|
self.remove_edge(edge.name)
|
||||||
|
|
||||||
def create_node(self, x: float = 0.0, y: float = 0.0):
|
def create_node(self, x: float = 0.0, y: float = 0.0):
|
||||||
node = self._create_node(x, y)
|
node = self._create_node(x, y)
|
||||||
return node
|
return node
|
||||||
|
|
@ -186,14 +202,14 @@ class Graph(object):
|
||||||
def is_upstream_node(self, node):
|
def is_upstream_node(self, node):
|
||||||
return reduce(
|
return reduce(
|
||||||
lambda acc, e: (acc and (e.node2 != node or not e.enable)),
|
lambda acc, e: (acc and (e.node2 != node or not e.enable)),
|
||||||
self._edges,
|
self._enable_edges(),
|
||||||
True
|
True
|
||||||
)
|
)
|
||||||
|
|
||||||
def is_downstream_node(self, node):
|
def is_downstream_node(self, node):
|
||||||
return reduce(
|
return reduce(
|
||||||
lambda acc, e: (acc and (e.node1 != node or not e.enable)),
|
lambda acc, e: (acc and (e.node1 != node or not e.enable)),
|
||||||
self._edges,
|
self._enable_edges(),
|
||||||
True
|
True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -203,10 +219,9 @@ class Graph(object):
|
||||||
acc or (
|
acc or (
|
||||||
(e.node1 == node or
|
(e.node1 == node or
|
||||||
e.node2 == node)
|
e.node2 == node)
|
||||||
and e._enable
|
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
self._edges,
|
self._enable_edges(),
|
||||||
False
|
False
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
# __init__.py -- Pamhyr
|
||||||
|
# Copyright (C) 2023 INRAE
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program 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 General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
@ -0,0 +1,182 @@
|
||||||
|
# test_Network.py -- Pamhyr
|
||||||
|
# Copyright (C) 2023 INRAE
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program 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 General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import os
|
||||||
|
import unittest
|
||||||
|
import tempfile
|
||||||
|
|
||||||
|
from Model.Saved import SavedStatus
|
||||||
|
|
||||||
|
from Model.Network.Graph import Graph
|
||||||
|
from Model.Network.Edge import Edge
|
||||||
|
from Model.Network.Node import Node
|
||||||
|
|
||||||
|
|
||||||
|
def new_graph():
|
||||||
|
status = SavedStatus()
|
||||||
|
g = Graph(status=status)
|
||||||
|
|
||||||
|
return g
|
||||||
|
|
||||||
|
|
||||||
|
class GraphTestCase(unittest.TestCase):
|
||||||
|
def test_graph_0(self):
|
||||||
|
g = new_graph()
|
||||||
|
|
||||||
|
self.assertEqual(g.nodes_counts(), 0)
|
||||||
|
self.assertEqual(g.edges_counts(), 0)
|
||||||
|
|
||||||
|
def test_graph_1(self):
|
||||||
|
g = new_graph()
|
||||||
|
|
||||||
|
n0 = g.add_node()
|
||||||
|
n1 = g.add_node()
|
||||||
|
|
||||||
|
e0 = g.add_edge(n0, n1)
|
||||||
|
|
||||||
|
self.assertEqual(g.nodes_counts(), 2)
|
||||||
|
self.assertEqual(g.edges_counts(), 1)
|
||||||
|
|
||||||
|
def test_graph_2(self):
|
||||||
|
g = new_graph()
|
||||||
|
|
||||||
|
n0 = g.add_node()
|
||||||
|
n1 = g.add_node()
|
||||||
|
|
||||||
|
e0 = g.add_edge(n0, n1)
|
||||||
|
|
||||||
|
g.remove_edge(e0.name)
|
||||||
|
|
||||||
|
self.assertEqual(g.nodes_counts(), 2)
|
||||||
|
self.assertEqual(g.edges_counts(), 0)
|
||||||
|
|
||||||
|
def test_graph_3(self):
|
||||||
|
g = new_graph()
|
||||||
|
|
||||||
|
n0 = g.add_node()
|
||||||
|
n1 = g.add_node()
|
||||||
|
|
||||||
|
e0 = g.add_edge(n0, n1)
|
||||||
|
|
||||||
|
g.remove_node(n0.name)
|
||||||
|
|
||||||
|
self.assertEqual(g.nodes_counts(), 1)
|
||||||
|
self.assertEqual(g.edges_counts(), 0)
|
||||||
|
|
||||||
|
def test_graph_4(self):
|
||||||
|
g = new_graph()
|
||||||
|
|
||||||
|
n0 = g.add_node()
|
||||||
|
n1 = g.add_node()
|
||||||
|
n2 = g.add_node()
|
||||||
|
|
||||||
|
e0 = g.add_edge(n0, n1)
|
||||||
|
e1 = g.add_edge(n1, n2)
|
||||||
|
|
||||||
|
g.remove_node(n1.name)
|
||||||
|
|
||||||
|
self.assertEqual(g.nodes_counts(), 2)
|
||||||
|
self.assertEqual(g.edges_counts(), 0)
|
||||||
|
|
||||||
|
def test_graph_upstream_0(self):
|
||||||
|
g = new_graph()
|
||||||
|
|
||||||
|
n0 = g.add_node()
|
||||||
|
n1 = g.add_node()
|
||||||
|
n2 = g.add_node()
|
||||||
|
|
||||||
|
e0 = g.add_edge(n0, n1)
|
||||||
|
e1 = g.add_edge(n1, n2)
|
||||||
|
|
||||||
|
self.assertEqual(g.is_upstream_node(n0), True)
|
||||||
|
self.assertEqual(g.is_upstream_node(n1), False)
|
||||||
|
self.assertEqual(g.is_upstream_node(n2), False)
|
||||||
|
|
||||||
|
def test_graph_upstream_1(self):
|
||||||
|
g = new_graph()
|
||||||
|
|
||||||
|
n0 = g.add_node()
|
||||||
|
n1 = g.add_node()
|
||||||
|
n2 = g.add_node()
|
||||||
|
|
||||||
|
e0 = g.add_edge(n0, n1)
|
||||||
|
e1 = g.add_edge(n2, n1)
|
||||||
|
|
||||||
|
self.assertEqual(g.is_upstream_node(n0), True)
|
||||||
|
self.assertEqual(g.is_upstream_node(n1), False)
|
||||||
|
self.assertEqual(g.is_upstream_node(n2), True)
|
||||||
|
|
||||||
|
def test_graph_upstream_disable(self):
|
||||||
|
g = new_graph()
|
||||||
|
|
||||||
|
n0 = g.add_node()
|
||||||
|
n1 = g.add_node()
|
||||||
|
n2 = g.add_node()
|
||||||
|
|
||||||
|
e0 = g.add_edge(n0, n1)
|
||||||
|
e1 = g.add_edge(n1, n2)
|
||||||
|
|
||||||
|
e0.disable()
|
||||||
|
|
||||||
|
# self.assertEqual(g.is_upstream_node(n0), False)
|
||||||
|
self.assertEqual(g.is_upstream_node(n1), True)
|
||||||
|
self.assertEqual(g.is_upstream_node(n2), False)
|
||||||
|
|
||||||
|
def test_graph_downstream_0(self):
|
||||||
|
g = new_graph()
|
||||||
|
|
||||||
|
n0 = g.add_node()
|
||||||
|
n1 = g.add_node()
|
||||||
|
n2 = g.add_node()
|
||||||
|
|
||||||
|
e0 = g.add_edge(n0, n1)
|
||||||
|
e1 = g.add_edge(n1, n2)
|
||||||
|
|
||||||
|
self.assertEqual(g.is_downstream_node(n0), False)
|
||||||
|
self.assertEqual(g.is_downstream_node(n1), False)
|
||||||
|
self.assertEqual(g.is_downstream_node(n2), True)
|
||||||
|
|
||||||
|
def test_graph_downstream_1(self):
|
||||||
|
g = new_graph()
|
||||||
|
|
||||||
|
n0 = g.add_node()
|
||||||
|
n1 = g.add_node()
|
||||||
|
n2 = g.add_node()
|
||||||
|
|
||||||
|
e0 = g.add_edge(n0, n1)
|
||||||
|
e1 = g.add_edge(n2, n1)
|
||||||
|
|
||||||
|
self.assertEqual(g.is_downstream_node(n0), False)
|
||||||
|
self.assertEqual(g.is_downstream_node(n1), True)
|
||||||
|
self.assertEqual(g.is_downstream_node(n2), False)
|
||||||
|
|
||||||
|
def test_graph_downstream_disable(self):
|
||||||
|
g = new_graph()
|
||||||
|
|
||||||
|
n0 = g.add_node()
|
||||||
|
n1 = g.add_node()
|
||||||
|
n2 = g.add_node()
|
||||||
|
|
||||||
|
e0 = g.add_edge(n0, n1)
|
||||||
|
e1 = g.add_edge(n1, n2)
|
||||||
|
|
||||||
|
e1.disable()
|
||||||
|
|
||||||
|
self.assertEqual(g.is_downstream_node(n0), False)
|
||||||
|
self.assertEqual(g.is_downstream_node(n1), True)
|
||||||
|
# self.assertEqual(g.is_downstream_node(n2), False)
|
||||||
Loading…
Reference in New Issue