Skip to content

Commit 0ae1042

Browse files
authored
Merge pull request #20 from michaeltryby/dev
Adding more tests
2 parents c4443ce + bcc479d commit 0ae1042

2 files changed

Lines changed: 105 additions & 12 deletions

File tree

toolkit/epanet/toolkit/toolkit.i

Lines changed: 82 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,40 @@ and return a (possibly) different pointer */
206206
Py_INCREF($result);
207207
}
208208

209+
210+
/* TYPEMAPS FOR FLOAT ARGUMENT AS RETURN VALUE */
211+
%typemap(in, numinputs=0) float* float_out (float temp) {
212+
$1 = &temp;
213+
}
214+
%typemap(argout) float* float_out {
215+
%append_output(PyFloat_FromDouble((double)*$1));
216+
}
217+
218+
219+
/* TYPEMAP FOR MEMORY MANAGEMENT AND ENCODING OF STRINGS */
220+
%typemap(in, numinputs=0)char** string_out (char* temp), int* slen (int temp){
221+
$1 = &temp;
222+
}
223+
%typemap(argout)(char** string_out, int* slen) {
224+
if (*$1) {
225+
PyObject* o;
226+
o = PyUnicode_FromStringAndSize(*$1, *$2);
227+
228+
$result = SWIG_Python_AppendOutput($result, o);
229+
free(*$1);
230+
}
231+
}
232+
233+
234+
/* TYPEMAPS FOR INT ARGUMENT AS RETURN VALUE */
235+
%typemap(in, numinputs=0) int* int_out (int temp) {
236+
$1 = &temp;
237+
}
238+
%typemap(argout) int* int_out {
239+
%append_output(PyInt_FromLong(*$1));
240+
}
241+
242+
209243
/* TYPEMAPS FOR LONG ARGUMENT AS RETURN VALUE */
210244
%typemap(in, numinputs=0) long* long_out (long temp) {
211245
$1 = &temp;
@@ -228,7 +262,7 @@ and return a (possibly) different pointer */
228262

229263
$1 = ($1_type)(val);
230264
}
231-
%apply EnumeratedType {EN_SaveOption};
265+
%apply EnumeratedType {EN_SaveOption, EN_NodeProperty};
232266

233267

234268
/* RENAME FUNCTIONS PYTHON STYLE */
@@ -261,10 +295,11 @@ int DLLEXPORT EN_open(EN_ProjectHandle ph, const char *f1, const char *f2, const
261295
int DLLEXPORT EN_close(EN_ProjectHandle ph);
262296

263297
// RETREIVING INFORMATION ABOUT NETWORK NODES
264-
int DLLEXPORT EN_getnodeindex(EN_ProjectHandle ph, char *id, int *index);
265-
int DLLEXPORT EN_getnodeid(EN_ProjectHandle ph, int index, char *id);
266-
int DLLEXPORT EN_getnodetype(EN_ProjectHandle ph, int index, int *code);
267-
int DLLEXPORT EN_getnodevalue(EN_ProjectHandle ph, int index, int code, EN_API_FLOAT_TYPE *value);
298+
int DLLEXPORT EN_getnodeindex(EN_ProjectHandle ph, char *id, int *int_out);
299+
//int DLLEXPORT EN_getnodeid(EN_ProjectHandle ph, int index, char *id);
300+
int DLLEXPORT EN_getnodename(EN_ProjectHandle ph, int index, char **string_out, int *slen);
301+
int DLLEXPORT EN_getnodetype(EN_ProjectHandle ph, int index, int *int_out);
302+
int DLLEXPORT EN_getnodevalue(EN_ProjectHandle ph, int index, EN_NodeProperty code, float *float_out);
268303

269304
// RETREIVING INFORMATION ABOUT NETWORK LINKS
270305
int DLLEXPORT EN_getlinkindex(EN_ProjectHandle ph, char *id, int *index);
@@ -340,12 +375,50 @@ int DLLEXPORT EN_checkError(EN_ProjectHandle ph, char **msg_buffer);
340375

341376
/* CODE ADDED DIRECTLY TO SWIGGED INTERFACE MODULE */
342377
%pythoncode%{
378+
343379
import enum
344380

381+
class NodeType(enum.Enum):
382+
JUNCTION = EN_JUNCTION
383+
RESERVOIR = EN_RESERVOIR
384+
TANK = EN_TANK
385+
386+
387+
class NodeProperty(enum.Enum):
388+
ELEVATION = EN_ELEVATION
389+
BASEDEMAND = EN_BASEDEMAND
390+
PATTERN = EN_PATTERN
391+
EMITTER = EN_EMITTER
392+
INITQUAL = EN_INITQUAL
393+
SOURCEQUAL = EN_SOURCEQUAL
394+
SOURCEPAT = EN_SOURCEPAT
395+
SOURCETYPE = EN_SOURCETYPE
396+
TANKLEVEL = EN_TANKLEVEL
397+
DEMAND = EN_DEMAND
398+
HEAD = EN_HEAD
399+
PRESSURE = EN_PRESSURE
400+
QUALITY = EN_QUALITY
401+
SOURCEMASS = EN_SOURCEMASS
402+
INITVOLUME = EN_INITVOLUME
403+
MIXMODEL = EN_MIXMODEL
404+
MIXZONEVOL = EN_MIXZONEVOL
405+
TANKDIAM = EN_TANKDIAM
406+
MINVOLUME = EN_MINVOLUME
407+
VOLCURVE = EN_VOLCURVE
408+
MINLEVEL = EN_MINLEVEL
409+
MAXLEVEL = EN_MAXLEVEL
410+
MIXFRACTION = EN_MIXFRACTION
411+
TANK_KBULK = EN_TANK_KBULK
412+
TANKVOLUME = EN_TANKVOLUME
413+
MAXVOLUME = EN_MAXVOLUME
414+
415+
345416
class SaveOptions(enum.Enum):
346-
NOSAVE = EN_NOSAVE
347-
SAVE = EN_SAVE
348-
INITFLOW = EN_INITFLOW
349-
SAVE_AND_INIT = EN_SAVE_AND_INIT
417+
NOSAVE = EN_NOSAVE
418+
SAVE = EN_SAVE
419+
INITFLOW = EN_INITFLOW
420+
SAVE_AND_INIT = EN_SAVE_AND_INIT
421+
422+
350423

351424
%}

toolkit/tests/test_toolkit.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010

1111
import pytest
1212

13-
from epanet.toolkit import toolkit as entk
13+
#from epanet.toolkit
14+
import toolkit as entk
1415

1516
from data import INPUT_FILE_NET_1, REPORT_FILE_TEST, OUTPUT_FILE_TEST
1617

@@ -49,8 +50,27 @@ def close():
4950
return _handle
5051

5152

52-
def test_hyd_step(handle):
53-
53+
def test_getnodeindex(handle):
54+
index = entk.getnodeindex(handle, "13")
55+
assert index == 4
56+
57+
58+
def test_getnodename(handle):
59+
id = entk.getnodename(handle, 4)
60+
assert id == "13"
61+
62+
63+
def test_getnodetype(handle):
64+
type = entk.getnodetype(handle, 4)
65+
assert type == entk.NodeType.JUNCTION.value
66+
67+
68+
def test_getnodevalue(handle):
69+
value = entk.getnodevalue(handle, 4, entk.NodeProperty.ELEVATION)
70+
assert value == 695.
71+
72+
73+
def test_hyd_step(handle):
5474
entk.openh(handle)
5575

5676
entk.inith(handle, entk.SaveOptions.NOSAVE)

0 commit comments

Comments
 (0)