diff --git a/tests/test_node.cpp b/tests/test_node.cpp index 35c08b9..31b1538 100644 --- a/tests/test_node.cpp +++ b/tests/test_node.cpp @@ -18,12 +18,12 @@ using namespace boost; -BOOST_AUTO_TEST_SUITE (test_node) +BOOST_AUTO_TEST_SUITE (node_props_after_open) - -BOOST_FIXTURE_TEST_CASE(test_node_getvalue, FixtureOpenClose) +BOOST_FIXTURE_TEST_CASE(test_junc_props, FixtureOpenClose) { - const auto junc_props = { + int index; + const auto props = { EN_ELEVATION, EN_BASEDEMAND, EN_PATTERN, @@ -34,45 +34,110 @@ BOOST_FIXTURE_TEST_CASE(test_node_getvalue, FixtureOpenClose) //pressure //quality }; - const int num_props = 5; + const size_t num_props = 5; std::vector test (num_props); double *value = test.data(); + error = EN_getnodeindex(ph, "11", &index); std::vector ref = {710.0, 150.0, 1.0, 0.0, 0.5}; - for (EN_NodeProperty p : junc_props) { - error = EN_getnodevalue(ph, 2, p, value++); + // Ranged for loop iterates over property set + for (EN_NodeProperty p : props) { + error = EN_getnodevalue(ph, index, p, value++); BOOST_REQUIRE(error == 0); } - BOOST_CHECK_EQUAL_COLLECTIONS(ref.begin(), ref.end(), test.begin(), test.end()); - - - const auto tank_props = { - EN_ELEVATION, - EN_INITQUAL, - EN_TANKLEVEL, - EN_INITVOLUME, - EN_MIXMODEL, - EN_MIXZONEVOL, - //demand - //head - //pressure - //quality - EN_TANKDIAM, - EN_MINVOLUME, - EN_MAXVOLUME, - EN_VOLCURVE, - EN_MINLEVEL, - EN_MAXLEVEL, - EN_MIXFRACTION, - EN_TANK_KBULK, - EN_TANKVOLUME - }; - + BOOST_CHECK(check_cdd_double(test, ref, 3)); } +BOOST_FIXTURE_TEST_CASE(test_tank_props, FixtureOpenClose) +{ + int index; + const auto props = { + EN_ELEVATION, + EN_TANKLEVEL, + EN_MINLEVEL, + EN_MAXLEVEL, + EN_TANKDIAM, + EN_MINVOLUME + }; + const size_t num_props = 6; + + std::vector test (num_props); + double *value = test.data(); + + error = EN_getnodeindex(ph, "2", &index); + std::vector ref = {850.0, 120.0, 100.0, 150.0, 50.5, 200296.167}; + + // Ranged for loop iterates over property set + for (EN_NodeProperty p : props) { + error = EN_getnodevalue(ph, index, p, value++); + BOOST_REQUIRE(error == 0); + } + + BOOST_CHECK(check_cdd_double(test, ref, 3)); +} + +BOOST_AUTO_TEST_SUITE_END() + + + + +BOOST_AUTO_TEST_SUITE(node_props_after_step) + +BOOST_FIXTURE_TEST_CASE(test_junc_props, FixtureAfterStep) +{ + int index; + const auto props = { + EN_DEMAND, + EN_HEAD, + EN_PRESSURE, + EN_QUALITY + }; + const size_t num_props = 4; + + std::vector test (num_props); + double *value = test.data(); + + error = EN_getnodeindex(ph, "11", &index); + std::vector ref = {179.999, 991.574, 122.006, 0.857}; + + + // Ranged for loop iterates over property set + for (EN_NodeProperty p : props) { + error = EN_getnodevalue(ph, index, p, value++); + BOOST_REQUIRE(error == 0); + } + + BOOST_CHECK(check_cdd_double(test, ref, 3)); +} + +BOOST_FIXTURE_TEST_CASE(test_tank_props, FixtureAfterStep) +{ + int index; + const auto props = { + EN_DEMAND, + EN_HEAD, + EN_PRESSURE, + EN_QUALITY + }; + const size_t num_props = 4; + + std::vector test (num_props); + double *value = test.data(); + + error = EN_getnodeindex(ph, "2", &index); + std::vector ref = {505.383, 978.138, 55.522, 0.911}; + + // Ranged for loop iterates over property set + for (EN_NodeProperty p : props) { + error = EN_getnodevalue(ph, index, p, value++); + BOOST_REQUIRE(error == 0); + } + + BOOST_CHECK(check_cdd_double(test, ref, 3)); +} BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_proj.cpp b/tests/test_proj.cpp index 5c4d1a9..7cdd1fb 100644 --- a/tests/test_proj.cpp +++ b/tests/test_proj.cpp @@ -47,7 +47,7 @@ BOOST_AUTO_TEST_CASE (test_proj_create_delete) BOOST_AUTO_TEST_CASE (test_proj_open_close) { - string path_inp(DATA_PATH_INP); + string path_inp(DATA_PATH_NET1); string path_rpt(DATA_PATH_RPT); string path_out(DATA_PATH_OUT); @@ -67,7 +67,7 @@ BOOST_AUTO_TEST_CASE(test_proj_savefile) { int error; - string path_inp(DATA_PATH_INP); + string path_inp(DATA_PATH_NET1); string inp_save("test_reopen.inp"); string path_rpt(DATA_PATH_RPT); string path_out(DATA_PATH_OUT); @@ -111,7 +111,7 @@ BOOST_AUTO_TEST_CASE(test_proj_reopen, * unit_test::depends_on("test_proj/test_p BOOST_AUTO_TEST_CASE(test_proj_run) { - string path_inp(DATA_PATH_INP); + string path_inp(DATA_PATH_NET1); string path_rpt(DATA_PATH_RPT); string path_out(DATA_PATH_OUT); diff --git a/tests/test_shared.hpp b/tests/test_shared.hpp index 024791b..9f5db07 100644 --- a/tests/test_shared.hpp +++ b/tests/test_shared.hpp @@ -55,13 +55,13 @@ boost::test_tools::predicate_result check_string(std::string test, std::string r } -#define DATA_PATH_INP "./net1.inp" +#define DATA_PATH_NET1 "./net1.inp" #define DATA_PATH_RPT "./test.rpt" #define DATA_PATH_OUT "./test.out" struct FixtureOpenClose{ FixtureOpenClose() { - path_inp = std::string(DATA_PATH_INP); + path_inp = std::string(DATA_PATH_NET1); path_rpt = std::string(DATA_PATH_RPT); path_out = std::string(DATA_PATH_OUT); @@ -81,3 +81,53 @@ struct FixtureOpenClose{ int error; EN_Project ph; }; + + +struct FixtureAfterStep{ + FixtureAfterStep() { + flag = 0; + tstop = 10800; + + path_inp = std::string(DATA_PATH_NET1); + path_rpt = std::string(DATA_PATH_RPT); + path_out = std::string(DATA_PATH_OUT); + + EN_createproject(&ph); + error = EN_open(ph, path_inp.c_str(), path_rpt.c_str(), path_out.c_str()); + + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_openQ(ph); + BOOST_REQUIRE(error == 0); + + error = EN_initQ(ph, flag); + BOOST_REQUIRE(error == 0); + + do { + error = EN_runQ(ph, &t); + BOOST_REQUIRE(error == 0); + + error = EN_stepQ(ph, &tstep); + BOOST_REQUIRE(error == 0); + + } while (tstep > 0 && t < tstop); + } + + ~FixtureAfterStep() { + + error = EN_closeQ(ph); + BOOST_REQUIRE(error == 0); + + error = EN_close(ph); + EN_deleteproject(&ph); + } + + std::string path_inp; + std::string path_rpt; + std::string path_out; + + int error, flag; + long t, tstep, tstop; + EN_Project ph; +};