22
33#
44# test_toolkit.py
5- #
5+ #
66# Created: October 19, 2018
77# Author: Michael E. Tryby
88# US EPA - ORD/NRMRL
9- #
9+ #
1010
1111import pytest
12+ import os .path as osp
1213
1314import epanet .toolkit .toolkit as en
1415
@@ -19,172 +20,209 @@ def test_createdelete():
1920
2021 _handle = en .proj_create ()
2122 assert (_handle != None )
22-
23+
2324 _handle = en .proj_delete (_handle )
2425 assert (_handle == None )
25-
26+
2627
2728def test_run ():
2829 _handle = en .proj_create ()
29-
30+
3031 en .proj_run (_handle , INPUT_FILE_NET_1 , REPORT_FILE_TEST , OUTPUT_FILE_TEST )
31-
32- en .proj_delete (_handle )
33-
32+ assert osp .isfile (REPORT_FILE_TEST ) == True
33+ assert osp .isfile (OUTPUT_FILE_TEST ) == True
34+
35+ en .proj_delete (_handle )
36+
3437
3538def test_openclose ():
3639 _handle = en .proj_create ()
3740 en .proj_open (_handle , INPUT_FILE_NET_1 , REPORT_FILE_TEST , OUTPUT_FILE_TEST )
38-
41+
3942 en .proj_close (_handle )
4043 en .proj_delete (_handle )
4144
42-
45+
46+ def test_savereopen ():
47+ input_file_reopen = "test_reopen.inp"
48+
49+ _handle = en .proj_create ()
50+
51+ en .proj_open (_handle , INPUT_FILE_NET_1 , REPORT_FILE_TEST , OUTPUT_FILE_TEST )
52+ en .proj_savefile (_handle , input_file_reopen )
53+ en .proj_close (_handle )
54+
55+ _handle = en .proj_delete (_handle )
56+
57+ _handle = en .proj_create ()
58+
59+ en .proj_open (_handle , input_file_reopen , REPORT_FILE_TEST , OUTPUT_FILE_TEST )
60+ en .proj_close (_handle )
61+
62+ _handle = en .proj_delete (_handle )
63+
64+
4365@pytest .fixture ()
44- def handle (request ):
66+ def handle (request ):
4567 _handle = en .proj_create ()
4668 en .proj_open (_handle , INPUT_FILE_NET_1 , REPORT_FILE_TEST , OUTPUT_FILE_TEST )
47-
69+
4870 def close ():
4971 en .proj_close (_handle )
5072 en .proj_delete (_handle )
51-
52- request .addfinalizer (close )
53- return _handle
54-
5573
56- def test_hyd_step (handle ):
74+ request .addfinalizer (close )
75+ return _handle
76+
77+
78+ def test_hyd_step (handle ):
5779 en .hydr_open (handle )
58-
80+
5981 en .hydr_init (handle , en .SaveOption .NOSAVE )
60-
82+
6183 while True :
6284 time = en .hydr_run (handle )
63-
85+
6486 step = en .hydr_next (handle )
65-
87+
6688 if time == 0. :
6789 break
68-
90+
6991 en .hydr_close (handle )
7092
7193
7294def test_qual_step (handle ):
7395 en .hydr_solve (handle )
74-
96+
7597 en .qual_open (handle )
76-
98+
7799 en .qual_init (handle , en .SaveOption .NOSAVE )
78-
100+
79101 while True :
80102 time = en .qual_run (handle )
81-
103+
82104 step = en .qual_next (handle )
83-
105+
84106 if time == 0. :
85107 break
86-
108+
87109 en .qual_close (handle )
88-
110+
89111
90112def test_report (handle ):
91-
113+
92114 nlinks = en .rprt_getcount (handle , en .CountType .LINKS )
115+ assert nlinks == 13
116+
93117 en .hydr_solve (handle )
94118 en .qual_solve (handle )
95-
96- en .rprt_set (handle , " NODES ALL" )
119+
120+ en .rprt_set (handle , ' NODES ALL' )
97121 en .rprt_writeresults (handle )
98-
122+ assert osp .isfile (REPORT_FILE_TEST ) == True
123+
124+
125+ def test_analysis (handle ):
126+ test_value = [];
127+
128+ for code in en .Option :
129+ test_value .append (en .anlys_getoption (handle , code ))
130+
131+ funits = en .anlys_getflowunits (handle )
132+ assert en .FlowUnits (funits ) == en .FlowUnits .GPM
133+
134+ test_value .clear ()
135+ ref_value = [86400 , 3600 , 300 , 7200 , 0 , 3600 , 0 , 360 , 0 , 0 , 0 , 0 , 0 , 0 , 3600 , 0 ]
136+ for code in en .TimeProperty :
137+ test_value .append (en .anlys_gettimeparam (handle , code ))
138+ assert test_value == ref_value
139+
140+ qualinfo = en .anlys_getqualinfo (handle )
141+ assert qualinfo == [1 , 'Chlorine' ,'mg/L' , 0 ]
142+
143+
99144
100145def test_node (handle ):
101- index = en .node_getindex (handle , "10" )
146+ index = en .node_getindex (handle , '10' )
147+ assert index == 1
148+
102149 id = en .node_getid (handle , index )
150+ assert id == '10'
151+
103152 type = en .node_gettype (handle , index )
153+ assert en .NodeType (type ) == en .NodeType .JUNCTION
154+
104155 coord = en .node_getcoord (handle , index )
105-
156+ assert coord == [20.0 , 70.0 ]
157+
106158
107159def test_demand (handle ):
108- index = en .node_getindex (handle , "10" )
160+ index = en .node_getindex (handle , '22' )
109161 count = en .dmnd_getcount (handle , index )
110-
162+ assert count == 1
163+
164+ model = en .dmnd_getmodel (handle )
165+ assert model == [0 , 0.0 , 0.0 , 0.5 ]
166+
167+ base = en .dmnd_getbase (handle , index , count )
168+ assert base == 200.0
169+
170+ ptrn = en .dmnd_getpattern (handle , index , count )
171+ assert ptrn == 1
172+
173+ en .dmnd_setname (handle , index , count , 'default' )
174+ name = en .dmnd_getname (handle , index , count )
175+ assert name == 'default'
176+
111177
112178def test_link (handle ):
113- index = en .link_getindex (handle , "10" )
179+ index = en .link_getindex (handle , '10' )
180+ assert index == 1
181+
114182 id = en .link_getid (handle , index )
183+ assert id == '10'
184+
115185 type = en .link_gettype (handle , index )
116-
186+ assert en .LinkType (type ) == en .LinkType .PIPE
187+
188+ nodes = en .link_getnodes (handle , index )
189+ assert nodes == [1 , 2 ]
190+
191+ test_value = []
192+ ref_value = [18.0 , 10530.0 , 100.0 , 0.0 , 1.0 , 100.0 , - 0.5 , - 1.0 , 0.0 , 0.0 , 0.0 , 0.0 ]
193+ for code in range (en .LinkProperty .SETTING .value ):
194+ test_value .append (en .link_getvalue (handle , index , en .LinkProperty (code )))
195+ assert test_value == pytest .approx (ref_value )
196+
117197
118198def test_pump (handle ):
119199 index = en .link_getindex (handle , "9" )
120- link_type = en .link_gettype (handle , index )
121- pump_type = en .pump_gettype (handle , index )
122-
200+ assert index == 13
201+
202+ type = en .link_gettype (handle , index )
203+ assert en .LinkType (type ) == en .LinkType .PUMP
204+
205+ type = en .pump_gettype (handle , index )
206+ assert en .PumpType (type ) == en .PumpType .POWER_FUNC
207+
123208
124209def test_pattern (handle ):
125210 index = en .ptrn_getindex (handle , "1" )
211+ assert index == 1
212+
126213 length = en .ptrn_getlength (handle , index )
127-
214+ assert length == 12
215+
216+ test_value = []
217+ ref_value = [1.0 , 1.2 , 1.4 , 1.6 , 1.4 , 1.2 , 1.0 , 0.8 , 0.6 , 0.4 , 0.6 , 0.8 ]
218+ for i in range (1 , length + 1 ):
219+ test_value .append (en .ptrn_getvalue (handle , index , i ))
220+ assert test_value == pytest .approx (ref_value )
221+
222+ value = en .ptrn_getavgvalue (handle , index )
223+ assert value == pytest .approx (1.0 )
224+
128225
129226def test_curve (handle ):
130227 index = en .curv_getindex (handle , "1" )
131228 length = en .curv_getlength (handle , index )
132-
133-
134- #def test_anlys(handle):
135- #
136- # en.anlys_getqualinfo()
137-
138-
139-
140- # def test_getnodeindex(handle):
141- # index = entk.getnodeindex(handle, "13")
142- # assert index == 4
143- #
144- #
145- # def test_getnodename(handle):
146- # id = entk.getnodename(handle, 4)
147- # assert id == "13"
148- #
149- #
150- # def test_getnodetype(handle):
151- # type = entk.getnodetype(handle, 4)
152- # assert type == entk.NodeType.JUNCTION.value
153- #
154- #
155- # def test_getnodevalue(handle):
156- # value = entk.getnodevalue(handle, 4, entk.NodeProperty.ELEVATION)
157- # assert value == 695.
158- #
159- #
160- # def test_getlinkindex(handle):
161- # index = entk.getlinkindex(handle, "31")
162- # assert index == 6
163- #
164- #
165- # def test_getlinkname(handle):
166- # id = entk.getlinkname(handle, 6)
167- # assert id == "31"
168- #
169- #
170- # def test_getlinktype(handle):
171- # type = entk.getlinktype(handle, 6)
172- # assert type == entk.LinkType.PIPE.value
173- #
174- #
175- # # def test_getlinknodearray(handle):
176- # # nodes = entk.getlinknodearray(handle, 6)
177- # # assert len(nodes) == 2
178- # # assert node[0] == 10
179- # # assert node[1] == 11
180- #
181- #
182- # def test_getlinkvalue(handle):
183- # value = entk.getlinkvalue(handle, 6, entk.LinkProperty.DIAMETER)
184- # assert value == 6.0
185- #
186- #
187-
188-
189-
190-
0 commit comments