Coverage for test/unit/tasks/hvac/test_dead_ends.py: 100%
70 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-12 17:09 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-12 17:09 +0000
1import unittest
3from bim2sim.elements import hvac_elements as hvac
4from bim2sim.elements.graphs.hvac_graph import HvacGraph
5from bim2sim.tasks.hvac import dead_ends
6from test.unit.elements.helper import SetupHelperHVAC
9class DeadEndHelper(SetupHelperHVAC):
10 def get_simple_circuit(self):
11 """get a simple circuit with a 4 port pipefitting with open ports,
12 some connected pipes and dead ends"""
13 flags = {}
14 with self.flag_manager(flags):
15 fitting_4port = self.element_generator(hvac.PipeFitting, flags=['fitting_4port'], n_ports=4)
16 fitting_3port_1 = self.element_generator(hvac.PipeFitting, flags=['fitting_3port_1'], n_ports=3)
17 fitting_3port_2 = self.element_generator(hvac.PipeFitting, flags=['fitting_3port_2'], n_ports=3)
18 pipestrand1 = [self.element_generator(hvac.Pipe, length=100, diameter=30, flags=['ps1']) for i in range(1)]
19 pipestrand2 = [self.element_generator(hvac.Pipe, length=100, diameter=30, flags=['ps2']) for i in range(1)]
20 pipestrand3 = [self.element_generator(hvac.Pipe, length=100, diameter=30, flags=['ps3']) for i in range(1)]
21 pipestrand4 = [self.element_generator(hvac.Pipe, length=100, diameter=30, flags=['ps4']) for i in range(1)]
22 pipestrand5 = [self.element_generator(hvac.Pipe, length=100, diameter=30, flags=['ps5']) for i in range(1)]
23 pipestrand6 = [self.element_generator(hvac.Pipe, length=100, diameter=30, flags=['ps6']) for i in range(1)]
25 self.connect_strait([*pipestrand1])
26 self.connect_strait([*pipestrand2])
27 self.connect_strait([*pipestrand3])
28 self.connect_strait([*pipestrand4])
29 self.connect_strait([*pipestrand5])
30 self.connect_strait([*pipestrand6])
31 fitting_4port.ports[0].connect(pipestrand1[0].ports[0])
32 fitting_4port.ports[1].connect(pipestrand2[0].ports[0])
33 fitting_4port.ports[2].connect(pipestrand3[0].ports[0])
34 pipestrand2[-1].ports[-1].connect(fitting_3port_1.ports[0])
35 fitting_3port_1.ports[1].connect(pipestrand4[0].ports[0])
36 fitting_3port_1.ports[2].connect(pipestrand5[0].ports[0])
37 fitting_3port_2.ports[0].connect(pipestrand4[-1].ports[-1])
38 fitting_3port_2.ports[1].connect(pipestrand5[-1].ports[-1])
39 fitting_3port_2.ports[2].connect(pipestrand6[0].ports[0])
41 circuit = [*pipestrand1, *pipestrand2, *pipestrand3, *pipestrand4, *pipestrand5, *pipestrand6,
42 fitting_4port, fitting_3port_1, fitting_3port_2]
44 graph = HvacGraph(circuit)
45 return graph, flags
48class TestOnlyDeadEnds(unittest.TestCase):
49 """ Test with a small circuit with 10 dead ends and no open ports for
50 consumers."""
52 helper = None
53 _backup = None
55 @classmethod
56 def setUpClass(cls):
57 cls.helper = DeadEndHelper()
59 def tearDown(self):
60 self.helper.reset()
62 def test_dead_end_identification_decision(self):
63 """Test performs search and remove of the dead ends by decision"""
65 graph, flags = self.helper.get_simple_circuit()
66 pot_dead_ends = dead_ends.DeadEnds.identify_dead_ends(graph)
67 pot_dead_ends_compare = [
68 flags['ps1'][0].ports[1],
69 flags['ps3'][0].ports[1],
70 flags['fitting_4port'][0].ports[3],
71 flags['ps6'][0].ports[1],
72 ]
73 self.assertCountEqual(pot_dead_ends_compare, pot_dead_ends)
74 job = dead_ends.DeadEnds.decide_dead_ends(graph, pot_dead_ends)
75 try:
76 while True:
77 decisions = next(job)
78 for dec in decisions:
79 dec.value = True
80 except StopIteration as result:
81 graph, n_removed = result.value
83 self.assertEqual(10, n_removed,
84 msg='Number of removed elements doesnt equal %s'
85 % n_removed)
87 def test_dead_end_identification_forced(self):
88 """Test performs search and remove of the dead ends with forced deletion
89 """
91 graph, flags = self.helper.get_simple_circuit()
92 pot_dead_ends = dead_ends.DeadEnds.identify_dead_ends(graph)
93 pot_dead_ends_compare = [
94 flags['ps1'][0].ports[1],
95 flags['ps3'][0].ports[1],
96 flags['fitting_4port'][0].ports[3],
97 flags['ps6'][0].ports[1],
98 ]
99 self.assertCountEqual(pot_dead_ends_compare, pot_dead_ends)
100 job = dead_ends.DeadEnds.decide_dead_ends(
101 graph, pot_dead_ends, force=True)
102 try:
103 while True:
104 dummy = next(job)
105 except StopIteration as result:
106 graph, n_removed = result.value
107 self.assertEqual(10, n_removed,
108 msg='Number of removed elements doesnt equal %s'
109 % n_removed)