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

1import unittest 

2 

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 

7 

8 

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)] 

24 

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]) 

40 

41 circuit = [*pipestrand1, *pipestrand2, *pipestrand3, *pipestrand4, *pipestrand5, *pipestrand6, 

42 fitting_4port, fitting_3port_1, fitting_3port_2] 

43 

44 graph = HvacGraph(circuit) 

45 return graph, flags 

46 

47 

48class TestOnlyDeadEnds(unittest.TestCase): 

49 """ Test with a small circuit with 10 dead ends and no open ports for 

50 consumers.""" 

51 

52 helper = None 

53 _backup = None 

54 

55 @classmethod 

56 def setUpClass(cls): 

57 cls.helper = DeadEndHelper() 

58 

59 def tearDown(self): 

60 self.helper.reset() 

61 

62 def test_dead_end_identification_decision(self): 

63 """Test performs search and remove of the dead ends by decision""" 

64 

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 

82 

83 self.assertEqual(10, n_removed, 

84 msg='Number of removed elements doesnt equal %s' 

85 % n_removed) 

86 

87 def test_dead_end_identification_forced(self): 

88 """Test performs search and remove of the dead ends with forced deletion 

89 """ 

90 

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)