Source code for pydistsim.tests.test_network

import unittest

import pytest
from networkx import is_directed_acyclic_graph, is_weakly_connected

from pydistsim.algorithm import NodeAlgorithm
from pydistsim.network import (
    BidirectionalNetwork,
    BidirectionalRangeNetwork,
    CompleteRangeType,
    DirectedNetwork,
    NetworkException,
    NetworkType,
    Node,
    RangeNetwork,
    RangeType,
)
from pydistsim.network.environment import Environment2D
from pydistsim.utils.testing import PyDistSimTestCase
from pydistsim.utils.tree import check_tree_key


[docs] class TestDirectedNetwork(PyDistSimTestCase): nw_class = RangeNetwork
[docs] def setUp(self): env = Environment2D() self.net = self.nw_class(rangeType=CompleteRangeType(env)) self.net.environment.image[22, 22] = 0 self.node1 = self.net.add_node(pos=[22.8, 21.8]) self.node1.memory["test"] = 1 self.node2 = self.net.add_node(pos=[21.9, 22.9]) self.node2.memory["test"] = 2 self.node3 = self.net.add_node(pos=[21.7, 21.7]) self.node3.memory["test"] = 3 self.node4 = self.net.add_node(pos=[23.7, 23.7]) self.node4.memory["test"] = 4 self.other_net = self.nw_class(rangeType=CompleteRangeType(env)) self.node_in_other_net = self.other_net.add_node()
[docs] def test_nodes(self): """Make sure the nodes are added.""" assert isinstance(self.node1, Node) assert len(self.net.nodes()) == 4 if isinstance(self.net.environment, Environment2D): assert self.net.environment._image.shape == (600, 600), "incorrect default size" assert isinstance(self.net.rangeType, RangeType) assert all(node.network == self.net for node in self.net.nodes())
[docs] def test_visibility(self): """ Pixel 22,22 is not space so node1 and node2 should not be visible but node3 is visible. """ assert not self.net.environment.are_visible(self.net.pos[self.node1], self.net.pos[self.node2]) assert self.net.environment.are_visible(self.net.pos[self.node2], self.net.pos[self.node3])
[docs] def test_subnetwork(self): """Test subnetwork creation.""" subnetwork: "NetworkType" = self.net.subnetwork([self.node1, self.node2]) assert len(subnetwork.nodes()) == 2 assert isinstance(subnetwork, type(self.net)) for og_node in [self.node1, self.node2]: sn_node = [n for n in subnetwork if n.memory["test"] == og_node.memory["test"]][0] assert sn_node.network == subnetwork assert isinstance(sn_node, type(og_node)) assert subnetwork.labels[sn_node] == str(sn_node._internal_id) assert subnetwork.ori[sn_node] == self.net.ori[og_node] assert all(subnetwork.pos[sn_node] == self.net.pos[og_node])
[docs] def test_nodes_sorted(self): """Test sorting of nodes.""" assert self.net.nodes_sorted() == [ self.node1, self.node2, self.node3, self.node4, ]
[docs] def test_remove_node(self): """Test node removal.""" pos = self.net.pos[self.node1] original_len = len(self.net.nodes()) print(f"Nodes ids pre-remove: {[node._internal_id for node in self.net.nodes()]}") self.net.remove_node(self.node1) print(f"Nodes ids post-remove: {[node._internal_id for node in self.net.nodes()]}") assert len(self.net.nodes()) == original_len - 1 assert self.node1 not in self.net.nodes() with self.assertRaises(NetworkException): self.net.remove_node(self.node1) self.net.add_node(self.node1, pos=pos)
[docs] def test_add_node_error_in_other_net(self): """Test adding node to network.""" with self.assertRaises(NetworkException): self.net.add_node(self.node_in_other_net)
[docs] def test_get_dic(self): """Test getting dictionary representation of the network.""" dic = self.net.get_dic() assert "nodes" in dic assert "edges" in dic
[docs] def test_get_tree_net(self): """Test getting tree representation of the network.""" tree_key = "T_KEY" keepMemKey = "TEST_KEEP_MEM" self.node1.memory[tree_key] = { "parent": None, "children": [self.node2, self.node3], } self.node2.memory[tree_key] = {"parent": self.node1, "children": []} self.node2.memory[keepMemKey] = {"test": 1} self.node3.memory[tree_key] = {"parent": self.node1, "children": []} self.node4.memory[tree_key] = {"parent": None, "children": []} tree = self.net.get_tree_net(tree_key) assert isinstance(tree, self.nw_class) assert len(tree.nodes()) == 3 assert len(self.net.nodes()) == 4 assert tree.is_connected() assert (node.network == tree for node in tree.nodes()) assert keepMemKey in self.node2.memory, "Memory should be kept" check_tree_key(self.net, tree_key)
@pytest.mark.filterwarnings("ignore:No data for colormapping.*") def test_get_fig_runs(self): """Test getting figure of the network.""" assert self.net.get_fig() is not None assert self.other_net.get_fig() is not None
[docs] class TestUnDirectedNetwork(TestDirectedNetwork): nw_class = BidirectionalRangeNetwork