From c7d533c6e4d159d3ba2972958a908f740bdc5ba5 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 28 Feb 2019 08:11:59 -0500 Subject: [PATCH 01/33] Adding tests for gettitle and saveinpfile --- src/epanet.c | 8 +-- src/input2.c | 2 +- tests/CMakeLists.txt | 2 +- tests/{test_toolkit.cpp => test_project.cpp} | 74 +++++++++++++++++--- 4 files changed, 69 insertions(+), 17 deletions(-) rename tests/{test_toolkit.cpp => test_project.cpp} (82%) diff --git a/src/epanet.c b/src/epanet.c index 626d65b..8a829ae 100644 --- a/src/epanet.c +++ b/src/epanet.c @@ -247,9 +247,9 @@ int DLLEXPORT EN_gettitle(EN_Project p, char *line1, char *line2, char *line3) */ { if (!p->Openflag) return 102; - strcpy(line1, p->Title[0]); - strcpy(line2, p->Title[1]); - strcpy(line3, p->Title[2]); + strncpy(line1, p->Title[0], TITLELEN); + strncpy(line2, p->Title[1], TITLELEN); + strncpy(line3, p->Title[2], TITLELEN); return 0; } @@ -265,7 +265,7 @@ int DLLEXPORT EN_settitle(EN_Project p, char *line1, char *line2, char *line3) strncpy(p->Title[0], line1, TITLELEN); strncpy(p->Title[1], line2, TITLELEN); strncpy(p->Title[2], line3, TITLELEN); - return 123; + return 0; } int DLLEXPORT EN_getcount(EN_Project p, int object, int *count) diff --git a/src/input2.c b/src/input2.c index b358ec5..b63a9a9 100644 --- a/src/input2.c +++ b/src/input2.c @@ -272,7 +272,7 @@ int newline(Project *pr, int sect, char *line) { n = (int)strlen(line); if (line[n - 1] == 10) - line[n - 1] = ' '; + line[n - 1] = '\0'; strncpy(pr->Title[parser->Ntitle], line, TITLELEN); parser->Ntitle++; } diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1e203b5..3737f43 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -27,7 +27,7 @@ if(MSVC) set(Boost_USE_STATIC_LIBS ON) endif(MSVC) set(Boost_THREAD_FOUND OFF) -find_package(Boost COMPONENTS thread) +find_package(Boost COMPONENTS thread filesystem) include_directories (${Boost_INCLUDE_DIRS}) diff --git a/tests/test_toolkit.cpp b/tests/test_project.cpp similarity index 82% rename from tests/test_toolkit.cpp rename to tests/test_project.cpp index 943a400..2e80ec0 100644 --- a/tests/test_toolkit.cpp +++ b/tests/test_project.cpp @@ -19,6 +19,8 @@ #define BOOST_TEST_MODULE "toolkit" #include +#include + #include #include "epanet2_2.h" @@ -29,11 +31,20 @@ #define DATA_PATH_OUT "./test.out" using namespace std; +using namespace boost; + +boost::test_tools::predicate_result check_string(std::string test, std::string ref) +{ + if (ref.compare(test) == 0) + return true; + else + return false; +} BOOST_AUTO_TEST_SUITE (test_toolkit) -BOOST_AUTO_TEST_CASE (test_alloc_free) +BOOST_AUTO_TEST_CASE (test_create_delete) { int error = 0; EN_Project ph = NULL; @@ -69,7 +80,9 @@ BOOST_AUTO_TEST_CASE (test_open_close) BOOST_AUTO_TEST_CASE(test_save_reopen) { - string path_inp(DATA_PATH_INP); + int error; + + string path_inp(DATA_PATH_INP); string inp_save("test_reopen.inp"); string path_rpt(DATA_PATH_RPT); string path_out(DATA_PATH_OUT); @@ -78,23 +91,27 @@ BOOST_AUTO_TEST_CASE(test_save_reopen) EN_Project ph_reopen; EN_createproject(&ph_save); + error = EN_open(ph_save, path_inp.c_str(), path_rpt.c_str(), path_out.c_str()); + BOOST_REQUIRE(error == 0); - EN_open(ph_save, path_inp.c_str(), path_rpt.c_str(), path_out.c_str()); - EN_saveinpfile(ph_save, inp_save.c_str()); - EN_close(ph_save); + error = EN_saveinpfile(ph_save, inp_save.c_str()); + BOOST_REQUIRE(error == 0); - EN_deleteproject(&ph_save); - BOOST_TEST_CHECKPOINT("Saved input file"); + error = EN_close(ph_save); + BOOST_REQUIRE(error == 0); + EN_deleteproject(&ph_save); + BOOST_TEST_CHECKPOINT("Saved input file"); EN_createproject(&ph_reopen); + error = EN_open(ph_reopen, inp_save.c_str(), path_rpt.c_str(), path_out.c_str()); + BOOST_REQUIRE(error == 0); - EN_open(ph_reopen, inp_save.c_str(), path_rpt.c_str(), path_out.c_str()); - EN_close(ph_reopen); - + error = EN_close(ph_reopen); + BOOST_REQUIRE(error == 0); EN_deleteproject(&ph_reopen); } -BOOST_AUTO_TEST_CASE(test_epanet) +BOOST_AUTO_TEST_CASE(test_runproject) { string path_inp(DATA_PATH_INP); string path_rpt(DATA_PATH_RPT); @@ -136,8 +153,43 @@ struct Fixture{ EN_Project ph; }; + BOOST_AUTO_TEST_SUITE(test_epanet_fixture) + +BOOST_FIXTURE_TEST_CASE(test_proj_save, Fixture) +{ + string inp_save("test_projsave.inp"); + + error = EN_saveinpfile(ph, inp_save.c_str()); + BOOST_REQUIRE(error == 0); + + BOOST_CHECK(filesystem::exists(inp_save) == true); + +} + +BOOST_FIXTURE_TEST_CASE(test_proj_title, Fixture) +{ + char c_test[3][80], c_ref[3][80]; + + strncpy(c_ref[0], " EPANET Example Network 1", 26); + strncpy(c_ref[1], "A simple example of modeling chlorine decay. Both bulk and", 59); + strncpy(c_ref[2], "wall reactions are included. ", 30); + + error = EN_gettitle(ph, c_test[0], c_test[1], c_test[2]); + BOOST_REQUIRE(error == 0); + + for (int i = 0; i < 3; i++) { + string test (c_test[i]); + string ref (c_ref[i]); + BOOST_CHECK(check_string(test, ref)); + } + + // Need a test for EN_settitle +} + + + BOOST_FIXTURE_TEST_CASE(test_epanet, Fixture) { error = EN_solveH(ph); From 97ae763d1a1a4841fab7c80d34f43c986b3adc2d Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 28 Feb 2019 09:17:16 -0500 Subject: [PATCH 02/33] Moving getcount in epanet.py and adding test --- include/epanet_py.h | 2 +- src/epanet_py.c | 12 ++++++------ tests/test_project.cpp | 22 +++++++++++++++++++++- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/include/epanet_py.h b/include/epanet_py.h index a7e3b84..e708756 100644 --- a/include/epanet_py.h +++ b/include/epanet_py.h @@ -36,6 +36,7 @@ int EXPORT_PY_API proj_init(Handle ph, const char *rptFile, const char *outFile, int EXPORT_PY_API proj_open(Handle ph, const char *inpFile, const char *rptFile, const char *binOutFile); int EXPORT_PY_API proj_gettitle(Handle ph, char *line1, char *line2, char *line3); int EXPORT_PY_API proj_settitle(Handle ph, const char *line1, const char *line2, const char *line3); +int EXPORT_PY_API proj_getcount(Handle ph, EN_CountType code, int *count); int EXPORT_PY_API proj_savefile(Handle ph, const char *inpfilename); int EXPORT_PY_API proj_close(Handle ph); @@ -66,7 +67,6 @@ int EXPORT_PY_API rprt_clear(Handle ph); int EXPORT_PY_API rprt_reset(Handle ph); int EXPORT_PY_API rprt_set(Handle ph, char *reportCommand); int EXPORT_PY_API rprt_setlevel(Handle ph, EN_StatusReport code); -int EXPORT_PY_API rprt_getcount(Handle ph, EN_CountType code, int *count); int EXPORT_PY_API rprt_anlysstats(Handle ph, EN_AnalysisStatistic code, double* value); diff --git a/src/epanet_py.c b/src/epanet_py.c index 72d69d9..5cba4a8 100644 --- a/src/epanet_py.c +++ b/src/epanet_py.c @@ -96,6 +96,12 @@ int EXPORT_PY_API proj_settitle(Handle ph, const char *line1, const char *line2, return error_set(pr->error, EN_settitle(pr->project, line1, line2, line3)); } +int EXPORT_PY_API rprt_getcount(Handle ph, EN_CountType code, int *count) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getcount(pr->project, code, count)); +} + int EXPORT_PY_API proj_savefile(Handle ph, const char *filename) { handle_t *pr = (handle_t *)ph; @@ -249,12 +255,6 @@ int EXPORT_PY_API rprt_setlevel(Handle ph, EN_StatusReport code) return error_set(pr->error, EN_setstatusreport(pr->project, code)); } -int EXPORT_PY_API rprt_getcount(Handle ph, EN_CountType code, int *count) -{ - handle_t *pr = (handle_t *)ph; - return error_set(pr->error, EN_getcount(pr->project, code, count)); -} - int EXPORT_PY_API rprt_anlysstats(Handle ph, EN_AnalysisStatistic code, double* value) { handle_t *pr = (handle_t *)ph; diff --git a/tests/test_project.cpp b/tests/test_project.cpp index 2e80ec0..a41e2a3 100644 --- a/tests/test_project.cpp +++ b/tests/test_project.cpp @@ -30,9 +30,11 @@ #define DATA_PATH_RPT "./test.rpt" #define DATA_PATH_OUT "./test.out" + using namespace std; using namespace boost; + boost::test_tools::predicate_result check_string(std::string test, std::string ref) { if (ref.compare(test) == 0) @@ -78,7 +80,8 @@ BOOST_AUTO_TEST_CASE (test_open_close) EN_deleteproject(&ph); } -BOOST_AUTO_TEST_CASE(test_save_reopen) +// Note: This test causes a segfault when built using debug configuration +BOOST_AUTO_TEST_CASE(test_save_reopen, * unit_test::disabled()) { int error; @@ -188,7 +191,24 @@ BOOST_FIXTURE_TEST_CASE(test_proj_title, Fixture) // Need a test for EN_settitle } +BOOST_FIXTURE_TEST_CASE(test_proj_getcount, Fixture) +{ + int i, array[7]; + + std::vector test; + vector ref = { 11, 2, 13, 1, 1, 2, 0 }; + for (i=EN_NODECOUNT; i<=EN_RULECOUNT; i++) { + error = EN_getcount(ph, i, &array[i]); + BOOST_REQUIRE(error == 0); + } + + test.assign(array, array + 7); + BOOST_CHECK_EQUAL_COLLECTIONS(ref.begin(), ref.end(), test.begin(), test.end()); + + error = EN_getcount(ph, 7, &i); + BOOST_CHECK(error == 251); +} BOOST_FIXTURE_TEST_CASE(test_epanet, Fixture) { From 91120b8e71aa03bf86ce12dde305f8488f64ee02 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 28 Feb 2019 10:12:25 -0500 Subject: [PATCH 03/33] Creating header for sharing fixtures, reorganizing tests --- tests/test_fixtures.hpp | 35 +++++++++ tests/test_hydqual.cpp | 134 ++++++++++++++++++++++++++++++++ tests/test_project.cpp | 164 ++++------------------------------------ 3 files changed, 184 insertions(+), 149 deletions(-) create mode 100644 tests/test_fixtures.hpp create mode 100644 tests/test_hydqual.cpp diff --git a/tests/test_fixtures.hpp b/tests/test_fixtures.hpp new file mode 100644 index 0000000..17260e9 --- /dev/null +++ b/tests/test_fixtures.hpp @@ -0,0 +1,35 @@ + + +#include + +#include "epanet2_2.h" + + +// NOTE: Project Home needs to be updated to run unit test +#define DATA_PATH_INP "./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_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()); + } + + ~FixtureOpenClose() { + error = EN_close(ph); + EN_deleteproject(&ph); + } + + std::string path_inp; + std::string path_rpt; + std::string path_out; + + int error; + EN_Project ph; +}; diff --git a/tests/test_hydqual.cpp b/tests/test_hydqual.cpp new file mode 100644 index 0000000..942a702 --- /dev/null +++ b/tests/test_hydqual.cpp @@ -0,0 +1,134 @@ +// +// test_project.cpp +// +// Date Created: January 24, 2018 +// +// Author: Michael E. Tryby +// US EPA - ORD/NRMRL +// + +//#define BOOST_TEST_DYN_LINK + +#ifdef _WIN32 +#define _CRTDBG_MAP_ALLOC +#include +#include +#else +#include +#endif + +#define BOOST_TEST_MODULE "hydqual" +#include + +#include "test_fixtures.hpp" + +using namespace std; +using namespace boost; + + +BOOST_AUTO_TEST_SUITE (test_hydraulics_quality) + +BOOST_FIXTURE_TEST_CASE(test_solveH_solveQ, FixtureOpenClose) +{ + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_solveQ(ph); + BOOST_REQUIRE(error == 0); + + error = EN_report(ph); + BOOST_REQUIRE(error == 0); +} + +BOOST_FIXTURE_TEST_CASE(test_hyd_step, FixtureOpenClose) +{ + int flag = 00; + long t, tstep; + + error = EN_openH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_initH(ph, flag); + BOOST_REQUIRE(error == 0); + + do { + error = EN_runH(ph, &t); + BOOST_REQUIRE(error == 0); + + error = EN_nextH(ph, &tstep); + BOOST_REQUIRE(error == 0); + + } while (tstep > 0); + + error = EN_closeH(ph); + BOOST_REQUIRE(error == 0); +} + +BOOST_FIXTURE_TEST_CASE(test_qual_step, FixtureOpenClose) +{ + int flag = 0; + long t, tstep; + + 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_nextQ(ph, &tstep); + BOOST_REQUIRE(error == 0); + + } while (tstep > 0); + + error = EN_closeQ(ph); + BOOST_REQUIRE(error == 0); +} + +BOOST_FIXTURE_TEST_CASE(test_progressive_step, FixtureOpenClose) +{ + int flag = EN_NOSAVE; + long t, tstep_h, tstep_q; + + error = EN_openH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_initH(ph, flag); + BOOST_REQUIRE(error == 0); + + error = EN_openQ(ph); + BOOST_REQUIRE(error == 0); + + error = EN_initQ(ph, flag); + BOOST_REQUIRE(error == 0); + + do { + error = EN_runH(ph, &t); + BOOST_REQUIRE(error == 0); + + error = EN_runQ(ph, &t); + BOOST_REQUIRE(error == 0); + + error = EN_nextH(ph, &tstep_h); + BOOST_REQUIRE(error == 0); + + error = EN_nextQ(ph, &tstep_q); + BOOST_REQUIRE(error == 0); + + } while (tstep_h > 0); + + error = EN_closeH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_closeQ(ph); + BOOST_REQUIRE(error == 0); + +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_project.cpp b/tests/test_project.cpp index a41e2a3..5725fe0 100644 --- a/tests/test_project.cpp +++ b/tests/test_project.cpp @@ -1,5 +1,5 @@ // -// test_epanet_toolkit.cpp +// test_project.cpp // // Date Created: January 24, 2018 // @@ -17,19 +17,11 @@ #include #endif -#define BOOST_TEST_MODULE "toolkit" +#define BOOST_TEST_MODULE "project" #include #include - -#include -#include "epanet2_2.h" - -// NOTE: Project Home needs to be updated to run unit test -#define DATA_PATH_INP "./net1.inp" -#define DATA_PATH_RPT "./test.rpt" -#define DATA_PATH_OUT "./test.out" - +#include "test_fixtures.hpp" using namespace std; using namespace boost; @@ -44,9 +36,9 @@ boost::test_tools::predicate_result check_string(std::string test, std::string r } -BOOST_AUTO_TEST_SUITE (test_toolkit) +BOOST_AUTO_TEST_SUITE (test_project) -BOOST_AUTO_TEST_CASE (test_create_delete) +BOOST_AUTO_TEST_CASE (test_proj_create_delete) { int error = 0; EN_Project ph = NULL; @@ -62,7 +54,7 @@ BOOST_AUTO_TEST_CASE (test_create_delete) BOOST_CHECK(ph == NULL); } -BOOST_AUTO_TEST_CASE (test_open_close) +BOOST_AUTO_TEST_CASE (test_proj_open_close) { string path_inp(DATA_PATH_INP); string path_rpt(DATA_PATH_RPT); @@ -114,7 +106,7 @@ BOOST_AUTO_TEST_CASE(test_save_reopen, * unit_test::disabled()) EN_deleteproject(&ph_reopen); } -BOOST_AUTO_TEST_CASE(test_runproject) +BOOST_AUTO_TEST_CASE(test_proj_run) { string path_inp(DATA_PATH_INP); string path_rpt(DATA_PATH_RPT); @@ -133,34 +125,11 @@ BOOST_AUTO_TEST_CASE(test_runproject) BOOST_AUTO_TEST_SUITE_END() -struct Fixture{ - Fixture() { - path_inp = string(DATA_PATH_INP); - path_rpt = string(DATA_PATH_RPT); - path_out = string(DATA_PATH_OUT); - EN_createproject(&ph); - error = EN_open(ph, path_inp.c_str(), path_rpt.c_str(), path_out.c_str()); - } - - ~Fixture() { - error = EN_close(ph); - EN_deleteproject(&ph); - } - - string path_inp; - string path_rpt; - string path_out; - - int error; - EN_Project ph; -}; +BOOST_AUTO_TEST_SUITE(test_project_fixture) -BOOST_AUTO_TEST_SUITE(test_epanet_fixture) - - -BOOST_FIXTURE_TEST_CASE(test_proj_save, Fixture) +BOOST_FIXTURE_TEST_CASE(test_proj_save, FixtureOpenClose) { string inp_save("test_projsave.inp"); @@ -171,7 +140,7 @@ BOOST_FIXTURE_TEST_CASE(test_proj_save, Fixture) } -BOOST_FIXTURE_TEST_CASE(test_proj_title, Fixture) +BOOST_FIXTURE_TEST_CASE(test_proj_title, FixtureOpenClose) { char c_test[3][80], c_ref[3][80]; @@ -191,10 +160,10 @@ BOOST_FIXTURE_TEST_CASE(test_proj_title, Fixture) // Need a test for EN_settitle } -BOOST_FIXTURE_TEST_CASE(test_proj_getcount, Fixture) +BOOST_FIXTURE_TEST_CASE(test_proj_getcount, FixtureOpenClose) { int i, array[7]; - + std::vector test; vector ref = { 11, 2, 13, 1, 1, 2, 0 }; @@ -210,110 +179,7 @@ BOOST_FIXTURE_TEST_CASE(test_proj_getcount, Fixture) BOOST_CHECK(error == 251); } -BOOST_FIXTURE_TEST_CASE(test_epanet, Fixture) -{ - error = EN_solveH(ph); - BOOST_REQUIRE(error == 0); - - error = EN_solveQ(ph); - BOOST_REQUIRE(error == 0); - - error = EN_report(ph); - BOOST_REQUIRE(error == 0); -} - -BOOST_FIXTURE_TEST_CASE(test_hyd_step, Fixture) -{ - int flag = 00; - long t, tstep; - - error = EN_openH(ph); - BOOST_REQUIRE(error == 0); - - error = EN_initH(ph, flag); - BOOST_REQUIRE(error == 0); - - do { - error = EN_runH(ph, &t); - BOOST_REQUIRE(error == 0); - - error = EN_nextH(ph, &tstep); - BOOST_REQUIRE(error == 0); - - } while (tstep > 0); - - error = EN_closeH(ph); - BOOST_REQUIRE(error == 0); -} - -BOOST_FIXTURE_TEST_CASE(test_qual_step, Fixture) -{ - int flag = 0; - long t, tstep; - - 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_nextQ(ph, &tstep); - BOOST_REQUIRE(error == 0); - - } while (tstep > 0); - - error = EN_closeQ(ph); - BOOST_REQUIRE(error == 0); -} - -BOOST_FIXTURE_TEST_CASE(test_progressive_stepping, Fixture) -{ - int flag = EN_NOSAVE; - long t, tstep_h, tstep_q; - - error = EN_openH(ph); - BOOST_REQUIRE(error == 0); - - error = EN_initH(ph, flag); - BOOST_REQUIRE(error == 0); - - error = EN_openQ(ph); - BOOST_REQUIRE(error == 0); - - error = EN_initQ(ph, flag); - BOOST_REQUIRE(error == 0); - - do { - error = EN_runH(ph, &t); - BOOST_REQUIRE(error == 0); - - error = EN_runQ(ph, &t); - BOOST_REQUIRE(error == 0); - - error = EN_nextH(ph, &tstep_h); - BOOST_REQUIRE(error == 0); - - error = EN_nextQ(ph, &tstep_q); - BOOST_REQUIRE(error == 0); - - } while (tstep_h > 0); - - error = EN_closeH(ph); - BOOST_REQUIRE(error == 0); - - error = EN_closeQ(ph); - BOOST_REQUIRE(error == 0); - -} - -BOOST_FIXTURE_TEST_CASE(test_setdemandpattern, Fixture) +BOOST_FIXTURE_TEST_CASE(test_setdemandpattern, FixtureOpenClose) { int i, j, pat_index, pat_index_2, numDemands, nnodes; char newpat[] = "new_pattern"; @@ -346,7 +212,7 @@ BOOST_FIXTURE_TEST_CASE(test_setdemandpattern, Fixture) } } } -BOOST_FIXTURE_TEST_CASE(test_addpattern, Fixture) +BOOST_FIXTURE_TEST_CASE(test_addpattern, FixtureOpenClose) { int pat_index, n_patterns_1, n_patterns_2; char newpat[] = "new_pattern"; @@ -369,7 +235,7 @@ BOOST_FIXTURE_TEST_CASE(test_addpattern, Fixture) BOOST_CHECK(pat_index == n_patterns_2); } -BOOST_FIXTURE_TEST_CASE(test_add_control, Fixture) +BOOST_FIXTURE_TEST_CASE(test_add_control, FixtureOpenClose) { int flag = 00; long t, tstep; From a4b2e53768aa5275c655b397a775bc9d5ef8824e Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 28 Feb 2019 11:14:15 -0500 Subject: [PATCH 04/33] Adding tests for save and use hydraulics file --- include/epanet2_2.h | 6 +++--- src/epanet.c | 12 ++++++------ tests/test_hydqual.cpp | 29 ++++++++++++++++++++++++++++- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/include/epanet2_2.h b/include/epanet2_2.h index 924bb1a..3e6fbff 100644 --- a/include/epanet2_2.h +++ b/include/epanet2_2.h @@ -220,7 +220,7 @@ typedef struct Project *EN_Project; Do not call this function while the hydraulics solver is open. */ - int DLLEXPORT EN_usehydfile(EN_Project ph, char *filename); + int DLLEXPORT EN_usehydfile(EN_Project ph, const char *filename); /** @brief Opens a project's hydraulic solver. @@ -343,7 +343,7 @@ typedef struct Project *EN_Project; called ::EN_solveH or the ::EN_initH - ::EN_runH - ::EN_nextH sequence with the initflag argument of ::EN_initH set to `EN_SAVE` or `EN_SAVE_AND_INIT`. */ - int DLLEXPORT EN_savehydfile(EN_Project ph, char *filename); + int DLLEXPORT EN_savehydfile(EN_Project ph, const char *filename); /** @brief Closes the hydraulic solver freeing all of its allocated memory. @@ -617,7 +617,7 @@ typedef struct Project *EN_Project; @return an error code */ int DLLEXPORT EN_getstatistic(EN_Project ph, int type, double* value); - + /******************************************************************** Analysis Options Functions diff --git a/src/epanet.c b/src/epanet.c index 8a829ae..d00499a 100644 --- a/src/epanet.c +++ b/src/epanet.c @@ -583,7 +583,7 @@ int DLLEXPORT EN_closeH(EN_Project p) return 0; } -int DLLEXPORT EN_savehydfile(EN_Project p, char *filename) +int DLLEXPORT EN_savehydfile(EN_Project p, const char *filename) /*---------------------------------------------------------------- ** Input: filename = name of file to which hydraulic results are saved ** Output: none @@ -611,7 +611,7 @@ int DLLEXPORT EN_savehydfile(EN_Project p, char *filename) return 0; } -int DLLEXPORT EN_usehydfile(EN_Project p, char *filename) +int DLLEXPORT EN_usehydfile(EN_Project p, const char *filename) /*---------------------------------------------------------------- ** Input: filename = name of previously saved hydraulics file ** Output: none @@ -2484,7 +2484,7 @@ int DLLEXPORT EN_settankdata(EN_Project p, int index, double elev, if (initlvl < 0.0 || minlvl < 0.0 || maxlvl < 0.0) return 209; if (minlvl > initlvl || minlvl > maxlvl || initlvl > maxlvl) return 225; if (diam < 0.0 || minvol < 0.0) return 209; - + // volume curve supplied if (strlen(volcurve) > 0) { @@ -3459,13 +3459,13 @@ int DLLEXPORT EN_getlinkvalue(EN_Project p, int index, int property, double *val v = (double)Pump[findpump(&p->network, index)].Ecurve; } break; - + case EN_PUMP_ECOST: if (Link[index].Type == PUMP) { v = (double)Pump[findpump(&p->network, index)].Ecost; } - break; + break; case EN_PUMP_EPAT: if (Link[index].Type == PUMP) @@ -4392,7 +4392,7 @@ int DLLEXPORT EN_setcurve(EN_Project p, int index, double *xValues, if (!p->Openflag) return 102; if (index <= 0 || index > net->Ncurves) return 206; if (nPoints <= 0) return 202; - + // Check that x values are increasing for (j = 1; j < nPoints; j++) if (xValues[j-1] >= xValues[j]) return 230; diff --git a/tests/test_hydqual.cpp b/tests/test_hydqual.cpp index 942a702..219a017 100644 --- a/tests/test_hydqual.cpp +++ b/tests/test_hydqual.cpp @@ -19,6 +19,7 @@ #define BOOST_TEST_MODULE "hydqual" #include +#include #include "test_fixtures.hpp" @@ -26,7 +27,7 @@ using namespace std; using namespace boost; -BOOST_AUTO_TEST_SUITE (test_hydraulics_quality) +BOOST_AUTO_TEST_SUITE (test_hyd_qual) BOOST_FIXTURE_TEST_CASE(test_solveH_solveQ, FixtureOpenClose) { @@ -131,4 +132,30 @@ BOOST_FIXTURE_TEST_CASE(test_progressive_step, FixtureOpenClose) } +// saveH + +BOOST_FIXTURE_TEST_CASE(test_hydr_savefile, FixtureOpenClose) +{ + string hyd_file("test_savefile.hyd"); + + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_savehydfile(ph, hyd_file.c_str()); + BOOST_REQUIRE(error == 0); + + BOOST_CHECK(filesystem::exists(hyd_file) == true); +} + +BOOST_FIXTURE_TEST_CASE(test_hydr_usefile, FixtureOpenClose, * unit_test::depends_on("test_hyd_qual/test_hydr_savefile")) +{ + string hyd_file("test_savefile.hyd"); + + error = EN_usehydfile(ph, hyd_file.c_str()); + BOOST_REQUIRE(error == 0); + + error = EN_solveQ(ph); + BOOST_REQUIRE(error == 0); +} + BOOST_AUTO_TEST_SUITE_END() From a626ef941c2be6963f5fcaec6ff4f538e7e14f35 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 28 Feb 2019 11:35:12 -0500 Subject: [PATCH 05/33] Adding test for saveH --- tests/test_hydqual.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tests/test_hydqual.cpp b/tests/test_hydqual.cpp index 219a017..e80c3c8 100644 --- a/tests/test_hydqual.cpp +++ b/tests/test_hydqual.cpp @@ -132,7 +132,17 @@ BOOST_FIXTURE_TEST_CASE(test_progressive_step, FixtureOpenClose) } -// saveH +BOOST_FIXTURE_TEST_CASE(test_hydr_save, FixtureOpenClose) +{ + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_saveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_report(ph); + BOOST_REQUIRE(error == 0); +} BOOST_FIXTURE_TEST_CASE(test_hydr_savefile, FixtureOpenClose) { @@ -158,4 +168,6 @@ BOOST_FIXTURE_TEST_CASE(test_hydr_usefile, FixtureOpenClose, * unit_test::depend BOOST_REQUIRE(error == 0); } + + BOOST_AUTO_TEST_SUITE_END() From dbc127b47e3c9041f7100e97de16db8f494f228b Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 28 Feb 2019 15:52:04 -0500 Subject: [PATCH 06/33] Upgrading to gcc 7 on Travis build worker --- .travis.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.travis.yml b/.travis.yml index 0eb3f74..c743fc4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,18 @@ language: python +matrix: + include: + # works on Precise and Trusty + - os: linux + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-7 + env: + - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7" + python: - "3.6" @@ -11,6 +24,7 @@ env: before_install: - sudo apt-get -qq update + - eval "${MATRIX_EVAL}" install: - sudo apt-get install -y libboost-test-dev From 37be05f881d44a1e10381bcebeb1639438b073f6 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 28 Feb 2019 16:03:55 -0500 Subject: [PATCH 07/33] setting cmake compiler --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c743fc4..b103f35 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,7 +33,10 @@ install: before_script: - mkdir -p $BUILD_HOME - cd $BUILD_HOME - - cmake -DBUILD_TESTS=ON -DBUILD_COVERAGE=ON .. + - cmake -DCMAKE_C_COMPILER=${CC} + -DCMAKE_CXX_COMPILER=${CXX} + -DBUILD_TESTS=ON + -DBUILD_COVERAGE=ON .. script: - cmake --build . From f8f95a4a6b1d46289981ab69270a842cb05f2c9e Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 28 Feb 2019 16:17:14 -0500 Subject: [PATCH 08/33] Working on depends on decorator --- tests/test_hydqual.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_hydqual.cpp b/tests/test_hydqual.cpp index e80c3c8..5dcd726 100644 --- a/tests/test_hydqual.cpp +++ b/tests/test_hydqual.cpp @@ -17,14 +17,14 @@ #include #endif -#define BOOST_TEST_MODULE "hydqual" +#define BOOST_TEST_MODULE hydqual #include #include #include "test_fixtures.hpp" using namespace std; -using namespace boost; +using namespace utf = boost::unit_test; BOOST_AUTO_TEST_SUITE (test_hyd_qual) @@ -157,7 +157,7 @@ BOOST_FIXTURE_TEST_CASE(test_hydr_savefile, FixtureOpenClose) BOOST_CHECK(filesystem::exists(hyd_file) == true); } -BOOST_FIXTURE_TEST_CASE(test_hydr_usefile, FixtureOpenClose, * unit_test::depends_on("test_hyd_qual/test_hydr_savefile")) +BOOST_FIXTURE_TEST_CASE(test_hydr_usefile, FixtureOpenClose, * utf::depends_on("test_hyd_qual/test_hydr_savefile")) { string hyd_file("test_savefile.hyd"); From 3c25d7df3840ed674e45caae7663d322ac1e9006 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 28 Feb 2019 16:45:01 -0500 Subject: [PATCH 09/33] Upgrading to boost1.67 --- .travis.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index b103f35..9da7e54 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,9 +7,11 @@ matrix: addons: apt: sources: + - sourceline: 'ppa:mhier/libboost-latest' - ubuntu-toolchain-r-test packages: - g++-7 + - boost1.67 env: - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7" @@ -27,8 +29,8 @@ before_install: - eval "${MATRIX_EVAL}" install: - - sudo apt-get install -y libboost-test-dev - - sudo apt-get install -y libboost-thread-dev +# - sudo apt-get install -y libboost-test-dev +# - sudo apt-get install -y libboost-thread-dev before_script: - mkdir -p $BUILD_HOME From 854168d88af9822b46c861e2659a52c755b73371 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 28 Feb 2019 16:51:20 -0500 Subject: [PATCH 10/33] Fixing bug --- tests/test_hydqual.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_hydqual.cpp b/tests/test_hydqual.cpp index 5dcd726..27bbf2f 100644 --- a/tests/test_hydqual.cpp +++ b/tests/test_hydqual.cpp @@ -24,7 +24,7 @@ #include "test_fixtures.hpp" using namespace std; -using namespace utf = boost::unit_test; +namespace utf = boost::unit_test; BOOST_AUTO_TEST_SUITE (test_hyd_qual) From b248e181b378ba13fe1f30d937671ff27bb7f949 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 28 Feb 2019 16:58:33 -0500 Subject: [PATCH 11/33] Fixing bug --- tests/test_hydqual.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_hydqual.cpp b/tests/test_hydqual.cpp index 27bbf2f..44987df 100644 --- a/tests/test_hydqual.cpp +++ b/tests/test_hydqual.cpp @@ -24,7 +24,7 @@ #include "test_fixtures.hpp" using namespace std; -namespace utf = boost::unit_test; +using namespace boost; BOOST_AUTO_TEST_SUITE (test_hyd_qual) @@ -157,7 +157,7 @@ BOOST_FIXTURE_TEST_CASE(test_hydr_savefile, FixtureOpenClose) BOOST_CHECK(filesystem::exists(hyd_file) == true); } -BOOST_FIXTURE_TEST_CASE(test_hydr_usefile, FixtureOpenClose, * utf::depends_on("test_hyd_qual/test_hydr_savefile")) +BOOST_FIXTURE_TEST_CASE(test_hydr_usefile, FixtureOpenClose, * unit_test::depends_on("test_hyd_qual/test_hydr_savefile")) { string hyd_file("test_savefile.hyd"); From 0d30d2c6a857816cb5024089494a3555fd661bf9 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 28 Feb 2019 17:12:22 -0500 Subject: [PATCH 12/33] including boost system in build --- tests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 3737f43..80030aa 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -27,7 +27,7 @@ if(MSVC) set(Boost_USE_STATIC_LIBS ON) endif(MSVC) set(Boost_THREAD_FOUND OFF) -find_package(Boost COMPONENTS thread filesystem) +find_package(Boost COMPONENTS system thread filesystem) include_directories (${Boost_INCLUDE_DIRS}) From 8640c860d20ce5722de805660e9a7035034be921 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 28 Feb 2019 17:31:16 -0500 Subject: [PATCH 13/33] Including pthread in build --- tests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 80030aa..9431065 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -44,7 +44,7 @@ foreach(testSrc ${TEST_SRCS}) add_executable(${testName} ${testSrc}) #link to Boost libraries AND your targets and dependencies - target_link_libraries(${testName} ${Boost_LIBRARIES} epanet2 epanet-output) + target_link_libraries(${testName} ${Boost_LIBRARIES} pthread epanet2 epanet-output) #Finally add it to test execution #Notice the WORKING_DIRECTORY and COMMAND From 41f810395acee48a2434978ae03d98819a072549 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 28 Feb 2019 17:49:40 -0500 Subject: [PATCH 14/33] Fixing windows bulid --- tests/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9431065..bb521e0 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -44,7 +44,11 @@ foreach(testSrc ${TEST_SRCS}) add_executable(${testName} ${testSrc}) #link to Boost libraries AND your targets and dependencies - target_link_libraries(${testName} ${Boost_LIBRARIES} pthread epanet2 epanet-output) + IF(MSVC) + target_link_libraries(${testName} ${Boost_LIBRARIES} epanet2 epanet-output) + ELSE(TRUE) + target_link_libraries(${testName} ${Boost_LIBRARIES} pthread epanet2 epanet-output) + ENDIF(MSVC) #Finally add it to test execution #Notice the WORKING_DIRECTORY and COMMAND From 07dfac6198c2ffa00654ec91e22f423a89fab307 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Fri, 1 Mar 2019 10:45:50 -0500 Subject: [PATCH 15/33] Adding test for stepQ and proj save/reopen --- tests/test_hydqual.cpp | 2 +- tests/test_project.cpp | 36 +++++++++++++++++++----------------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/tests/test_hydqual.cpp b/tests/test_hydqual.cpp index 44987df..58c6637 100644 --- a/tests/test_hydqual.cpp +++ b/tests/test_hydqual.cpp @@ -83,7 +83,7 @@ BOOST_FIXTURE_TEST_CASE(test_qual_step, FixtureOpenClose) error = EN_runQ(ph, &t); BOOST_REQUIRE(error == 0); - error = EN_nextQ(ph, &tstep); + error = EN_stepQ(ph, &tstep); BOOST_REQUIRE(error == 0); } while (tstep > 0); diff --git a/tests/test_project.cpp b/tests/test_project.cpp index 5725fe0..511f30a 100644 --- a/tests/test_project.cpp +++ b/tests/test_project.cpp @@ -72,18 +72,17 @@ BOOST_AUTO_TEST_CASE (test_proj_open_close) EN_deleteproject(&ph); } -// Note: This test causes a segfault when built using debug configuration -BOOST_AUTO_TEST_CASE(test_save_reopen, * unit_test::disabled()) +BOOST_AUTO_TEST_CASE(test_proj_savefile) { int error; string path_inp(DATA_PATH_INP); - string inp_save("test_reopen.inp"); + string inp_save("test_reopen.inp"); string path_rpt(DATA_PATH_RPT); string path_out(DATA_PATH_OUT); EN_Project ph_save; - EN_Project ph_reopen; + EN_createproject(&ph_save); error = EN_open(ph_save, path_inp.c_str(), path_rpt.c_str(), path_out.c_str()); @@ -92,12 +91,25 @@ BOOST_AUTO_TEST_CASE(test_save_reopen, * unit_test::disabled()) error = EN_saveinpfile(ph_save, inp_save.c_str()); BOOST_REQUIRE(error == 0); + BOOST_CHECK(filesystem::exists(inp_save) == true); + error = EN_close(ph_save); BOOST_REQUIRE(error == 0); EN_deleteproject(&ph_save); - BOOST_TEST_CHECKPOINT("Saved input file"); +} - EN_createproject(&ph_reopen); +BOOST_AUTO_TEST_CASE(test_proj_reopen, * unit_test::depends_on("test_project/test_proj_savefile")) +{ + int error; + + string inp_save("test_reopen.inp"); + string path_rpt(DATA_PATH_RPT); + string path_out(DATA_PATH_OUT); + + EN_Project ph_reopen; + + + EN_createproject(&ph_reopen); error = EN_open(ph_reopen, inp_save.c_str(), path_rpt.c_str(), path_out.c_str()); BOOST_REQUIRE(error == 0); @@ -129,19 +141,9 @@ BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE(test_project_fixture) -BOOST_FIXTURE_TEST_CASE(test_proj_save, FixtureOpenClose) -{ - string inp_save("test_projsave.inp"); - - error = EN_saveinpfile(ph, inp_save.c_str()); - BOOST_REQUIRE(error == 0); - - BOOST_CHECK(filesystem::exists(inp_save) == true); - -} - BOOST_FIXTURE_TEST_CASE(test_proj_title, FixtureOpenClose) { + // How is the API user supposed to know array size? char c_test[3][80], c_ref[3][80]; strncpy(c_ref[0], " EPANET Example Network 1", 26); From 612c898bd20ee3da59535d07f37d4375ca63fd94 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Fri, 1 Mar 2019 11:45:39 -0500 Subject: [PATCH 16/33] Renaming files, adding test for getstatistics --- tests/{test_hydqual.cpp => test_hydrqual.cpp} | 8 +-- tests/{test_project.cpp => test_proj.cpp} | 8 +-- tests/test_rprtanlys.cpp | 59 +++++++++++++++++++ 3 files changed, 67 insertions(+), 8 deletions(-) rename tests/{test_hydqual.cpp => test_hydrqual.cpp} (95%) rename tests/{test_project.cpp => test_proj.cpp} (98%) create mode 100644 tests/test_rprtanlys.cpp diff --git a/tests/test_hydqual.cpp b/tests/test_hydrqual.cpp similarity index 95% rename from tests/test_hydqual.cpp rename to tests/test_hydrqual.cpp index 58c6637..24e2100 100644 --- a/tests/test_hydqual.cpp +++ b/tests/test_hydrqual.cpp @@ -1,7 +1,7 @@ // -// test_project.cpp +// test_hydrqual.cpp // -// Date Created: January 24, 2018 +// Date Created: February 28, 2019 // // Author: Michael E. Tryby // US EPA - ORD/NRMRL @@ -27,7 +27,7 @@ using namespace std; using namespace boost; -BOOST_AUTO_TEST_SUITE (test_hyd_qual) +BOOST_AUTO_TEST_SUITE (test_hydrqual) BOOST_FIXTURE_TEST_CASE(test_solveH_solveQ, FixtureOpenClose) { @@ -157,7 +157,7 @@ BOOST_FIXTURE_TEST_CASE(test_hydr_savefile, FixtureOpenClose) BOOST_CHECK(filesystem::exists(hyd_file) == true); } -BOOST_FIXTURE_TEST_CASE(test_hydr_usefile, FixtureOpenClose, * unit_test::depends_on("test_hyd_qual/test_hydr_savefile")) +BOOST_FIXTURE_TEST_CASE(test_hydr_usefile, FixtureOpenClose, * unit_test::depends_on("test_hydrqual/test_hydr_savefile")) { string hyd_file("test_savefile.hyd"); diff --git a/tests/test_project.cpp b/tests/test_proj.cpp similarity index 98% rename from tests/test_project.cpp rename to tests/test_proj.cpp index 511f30a..295d1e1 100644 --- a/tests/test_project.cpp +++ b/tests/test_proj.cpp @@ -36,7 +36,7 @@ boost::test_tools::predicate_result check_string(std::string test, std::string r } -BOOST_AUTO_TEST_SUITE (test_project) +BOOST_AUTO_TEST_SUITE (test_proj) BOOST_AUTO_TEST_CASE (test_proj_create_delete) { @@ -98,7 +98,7 @@ BOOST_AUTO_TEST_CASE(test_proj_savefile) EN_deleteproject(&ph_save); } -BOOST_AUTO_TEST_CASE(test_proj_reopen, * unit_test::depends_on("test_project/test_proj_savefile")) +BOOST_AUTO_TEST_CASE(test_proj_reopen, * unit_test::depends_on("test_proj/test_proj_savefile")) { int error; @@ -138,8 +138,7 @@ BOOST_AUTO_TEST_SUITE_END() -BOOST_AUTO_TEST_SUITE(test_project_fixture) - +BOOST_AUTO_TEST_SUITE(test_proj_fixture) BOOST_FIXTURE_TEST_CASE(test_proj_title, FixtureOpenClose) { @@ -214,6 +213,7 @@ BOOST_FIXTURE_TEST_CASE(test_setdemandpattern, FixtureOpenClose) } } } + BOOST_FIXTURE_TEST_CASE(test_addpattern, FixtureOpenClose) { int pat_index, n_patterns_1, n_patterns_2; diff --git a/tests/test_rprtanlys.cpp b/tests/test_rprtanlys.cpp new file mode 100644 index 0000000..bbdbece --- /dev/null +++ b/tests/test_rprtanlys.cpp @@ -0,0 +1,59 @@ +// +// test_rprtanlys.cpp +// +// Date Created: February 28, 2019 +// +// Author: Michael E. Tryby +// US EPA - ORD/NRMRL +// + +//#define BOOST_TEST_DYN_LINK + +#ifdef _WIN32 +#define _CRTDBG_MAP_ALLOC +#include +#include +#else +#include +#endif + +#define BOOST_TEST_MODULE hydqual +#include +#include + +#include "test_fixtures.hpp" + +using namespace std; +using namespace boost; + + +BOOST_AUTO_TEST_SUITE (test_rprtanlys) + +BOOST_FIXTURE_TEST_CASE(test_rprt_anlysstats, FixtureOpenClose) +{ + int i; + double array[5]; + + std::vector test; + vector ref = {3.0, 7.0799498320679432e-06, 1.6680242187483429e-08, + 0.0089173150106518495, 0.99999998187144024}; + + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_solveQ(ph); + BOOST_REQUIRE(error == 0); + + + for (i=EN_ITERATIONS; i<=EN_MASSBALANCE; i++) { + error = EN_getstatistic(ph, i, &array[i]); + BOOST_REQUIRE(error == 0); + } + + test.assign(array, array + 5); + BOOST_CHECK_EQUAL_COLLECTIONS(ref.begin(), ref.end(), test.begin(), test.end()); +} + + + +BOOST_AUTO_TEST_SUITE_END() From b3a97018635ae75ba92d2432212eac67300a5aae Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Fri, 1 Mar 2019 12:12:10 -0500 Subject: [PATCH 17/33] Adding test for getoption --- src/epanet.c | 2 +- tests/test_rprtanlys.cpp | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/epanet.c b/src/epanet.c index d00499a..a89d648 100644 --- a/src/epanet.c +++ b/src/epanet.c @@ -1042,7 +1042,7 @@ int DLLEXPORT EN_getstatistic(EN_Project p, int type, double *value) break; default: *value = 0.0; - break; + return 251; } return 0; } diff --git a/tests/test_rprtanlys.cpp b/tests/test_rprtanlys.cpp index bbdbece..4af6604 100644 --- a/tests/test_rprtanlys.cpp +++ b/tests/test_rprtanlys.cpp @@ -52,8 +52,36 @@ BOOST_FIXTURE_TEST_CASE(test_rprt_anlysstats, FixtureOpenClose) test.assign(array, array + 5); BOOST_CHECK_EQUAL_COLLECTIONS(ref.begin(), ref.end(), test.begin(), test.end()); + + error = EN_getstatistic(ph, 8, &array[0]); + BOOST_CHECK(error == 251); } +BOOST_FIXTURE_TEST_CASE(test_anlys_getoption, FixtureOpenClose) +{ + int i; + double array[13]; + std::vector test; + vector ref = {40.0, 0.001, 0.01, 0.5, 1.0, 0.0, 0.0, 1.0, 0.0, 75.0, 0.0, 0.0, 0.0}; + + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_solveQ(ph); + BOOST_REQUIRE(error == 0); + + + for (i=EN_TRIALS; i<=EN_DEMANDCHARGE; i++) { + error = EN_getoption(ph, i, &array[i]); + BOOST_REQUIRE(error == 0); + } + + test.assign(array, array + 13); + BOOST_CHECK_EQUAL_COLLECTIONS(ref.begin(), ref.end(), test.begin(), test.end()); + + error = EN_getoption(ph, 18, &array[0]); + BOOST_CHECK(error == 251); +} BOOST_AUTO_TEST_SUITE_END() From fca0df7a7b93878a9c1c48e659111ba2276dc513 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Fri, 1 Mar 2019 14:14:09 -0500 Subject: [PATCH 18/33] Moving custom testing predicates to shared header --- tests/test_fixtures.hpp | 35 ------------ tests/test_hydrqual.cpp | 8 +-- tests/test_output.cpp | 78 ++++++-------------------- tests/test_proj.cpp | 17 ++---- tests/test_rprtanlys.cpp | 11 ++-- tests/test_shared.hpp | 118 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 150 insertions(+), 117 deletions(-) delete mode 100644 tests/test_fixtures.hpp create mode 100644 tests/test_shared.hpp diff --git a/tests/test_fixtures.hpp b/tests/test_fixtures.hpp deleted file mode 100644 index 17260e9..0000000 --- a/tests/test_fixtures.hpp +++ /dev/null @@ -1,35 +0,0 @@ - - -#include - -#include "epanet2_2.h" - - -// NOTE: Project Home needs to be updated to run unit test -#define DATA_PATH_INP "./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_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()); - } - - ~FixtureOpenClose() { - error = EN_close(ph); - EN_deleteproject(&ph); - } - - std::string path_inp; - std::string path_rpt; - std::string path_out; - - int error; - EN_Project ph; -}; diff --git a/tests/test_hydrqual.cpp b/tests/test_hydrqual.cpp index 24e2100..8db105c 100644 --- a/tests/test_hydrqual.cpp +++ b/tests/test_hydrqual.cpp @@ -17,11 +17,11 @@ #include #endif -#define BOOST_TEST_MODULE hydqual -#include -#include -#include "test_fixtures.hpp" +#define BOOST_TEST_MODULE hydqual + +#include "test_shared.hpp" + using namespace std; using namespace boost; diff --git a/tests/test_output.cpp b/tests/test_output.cpp index b0848a1..e2098e3 100644 --- a/tests/test_output.cpp +++ b/tests/test_output.cpp @@ -12,68 +12,26 @@ // NOTE: Can not dyn link boost using Visual Studio 10 2010 //#define BOOST_TEST_DYN_LINK -#define BOOST_TEST_MODULE "output" -#include + + #include #include -#include -#include + + +#define BOOST_TEST_MODULE "output" + +#include "test_shared.hpp" #include "epanet_output.h" -#define DATA_PATH "./example1.out" +#define DATA_PATH_OUTPUT "./example1.out" -using namespace std; - -// Custom test to check the minimum number of correct decimal digits between -// the test and the ref vectors. -boost::test_tools::predicate_result check_cdd(std::vector& test, - std::vector& ref, long cdd_tol){ - float tmp, min_cdd = 10.0; - - // TODO: What if the vectors aren't the same length? - - std::vector::iterator test_it; - std::vector::iterator ref_it; - - for (test_it = test.begin(), ref_it = ref.begin(); - (test_it < test.end()) && (ref_it < ref.end()); - ++test_it, ++ref_it) - { - if (*test_it != *ref_it) { - // Compute log absolute error - tmp = abs(*test_it - *ref_it); - if (tmp < 1.0e-7f) - tmp = 1.0e-7f; - - else if (tmp > 2.0f) - tmp = 1.0f; - - tmp = -log10(tmp); - if (tmp < 0.0f) - tmp = 0.0f; - - if (tmp < min_cdd) - min_cdd = tmp; - } - } - - return floor(min_cdd) >= cdd_tol; -} - -boost::test_tools::predicate_result check_string(std::string test, std::string ref) -{ - if (ref.compare(test) == 0) - return true; - else - return false; -} BOOST_AUTO_TEST_SUITE (test_output_auto) BOOST_AUTO_TEST_CASE(OpenCloseTest) { - std::string path = std::string(DATA_PATH); + std::string path = std::string(DATA_PATH_OUTPUT); ENR_Handle p_handle = NULL; ENR_init(&p_handle); @@ -91,7 +49,7 @@ BOOST_AUTO_TEST_SUITE_END() struct Fixture{ Fixture() { - path = std::string(DATA_PATH); + path = std::string(DATA_PATH_OUTPUT); error = ENR_init(&p_handle); ENR_clearError(p_handle); @@ -176,7 +134,7 @@ BOOST_FIXTURE_TEST_CASE(test_getNodeAttribute, Fixture) { std::vector test_vec; test_vec.assign(array, array + array_dim); - BOOST_CHECK(check_cdd(test_vec, ref_vec, 3)); + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); } BOOST_FIXTURE_TEST_CASE(test_getLinkAttribute, Fixture) { @@ -201,7 +159,7 @@ BOOST_FIXTURE_TEST_CASE(test_getLinkAttribute, Fixture) { std::vector test_vec; test_vec.assign(array, array + array_dim); - BOOST_CHECK(check_cdd(test_vec, ref_vec, 3)); + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); } BOOST_FIXTURE_TEST_CASE(test_getNodeResult, Fixture) { @@ -217,7 +175,7 @@ BOOST_FIXTURE_TEST_CASE(test_getNodeResult, Fixture) { std::vector test_vec; test_vec.assign(array, array + array_dim); - BOOST_CHECK(check_cdd(test_vec, ref_vec, 3)); + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); } BOOST_FIXTURE_TEST_CASE(test_getLinkResult, Fixture) { @@ -237,7 +195,7 @@ BOOST_FIXTURE_TEST_CASE(test_getLinkResult, Fixture) { std::vector test_vec; test_vec.assign(array, array + array_dim); - BOOST_CHECK(check_cdd(test_vec, ref_vec, 3)); + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); } BOOST_FIXTURE_TEST_CASE(test_getNodeSeries, Fixture){ @@ -259,7 +217,7 @@ BOOST_FIXTURE_TEST_CASE(test_getNodeSeries, Fixture){ std::vector test_vec; test_vec.assign(array, array + array_dim); - BOOST_CHECK(check_cdd(test_vec, ref_vec, 3)); + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); } BOOST_FIXTURE_TEST_CASE(test_getLinkSeries, Fixture) { @@ -281,7 +239,7 @@ BOOST_FIXTURE_TEST_CASE(test_getLinkSeries, Fixture) { std::vector test_vec; test_vec.assign(array, array + array_dim); - BOOST_CHECK(check_cdd(test_vec, ref_vec, 3)); + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); } BOOST_FIXTURE_TEST_CASE(test_getNetReacts, Fixture) { @@ -297,7 +255,7 @@ BOOST_FIXTURE_TEST_CASE(test_getNetReacts, Fixture) { std::vector test_vec; test_vec.assign(array, array + array_dim); - BOOST_CHECK(check_cdd(test_vec, ref_vec, 2)); + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 2)); } BOOST_FIXTURE_TEST_CASE(test_getEnergyUsage, Fixture) { @@ -317,7 +275,7 @@ BOOST_FIXTURE_TEST_CASE(test_getEnergyUsage, Fixture) { std::vector test_vec; test_vec.assign(array, array + array_dim); - BOOST_CHECK(check_cdd(test_vec, ref_vec, 3)); + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); } BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_proj.cpp b/tests/test_proj.cpp index 295d1e1..d88872a 100644 --- a/tests/test_proj.cpp +++ b/tests/test_proj.cpp @@ -17,25 +17,16 @@ #include #endif -#define BOOST_TEST_MODULE "project" -#include -#include -#include "test_fixtures.hpp" +#define BOOST_TEST_MODULE "project" + +#include "test_shared.hpp" + using namespace std; using namespace boost; -boost::test_tools::predicate_result check_string(std::string test, std::string ref) -{ - if (ref.compare(test) == 0) - return true; - else - return false; -} - - BOOST_AUTO_TEST_SUITE (test_proj) BOOST_AUTO_TEST_CASE (test_proj_create_delete) diff --git a/tests/test_rprtanlys.cpp b/tests/test_rprtanlys.cpp index 4af6604..f91e166 100644 --- a/tests/test_rprtanlys.cpp +++ b/tests/test_rprtanlys.cpp @@ -17,11 +17,11 @@ #include #endif -#define BOOST_TEST_MODULE hydqual -#include -#include -#include "test_fixtures.hpp" +#define BOOST_TEST_MODULE hydqual + +#include "test_shared.hpp" + using namespace std; using namespace boost; @@ -51,7 +51,8 @@ BOOST_FIXTURE_TEST_CASE(test_rprt_anlysstats, FixtureOpenClose) } test.assign(array, array + 5); - BOOST_CHECK_EQUAL_COLLECTIONS(ref.begin(), ref.end(), test.begin(), test.end()); +// BOOST_CHECK_EQUAL_COLLECTIONS(ref.begin(), ref.end(), test.begin(), test.end()); + BOOST_CHECK(check_cdd_double(test, ref, 3)); error = EN_getstatistic(ph, 8, &array[0]); BOOST_CHECK(error == 251); diff --git a/tests/test_shared.hpp b/tests/test_shared.hpp new file mode 100644 index 0000000..e852754 --- /dev/null +++ b/tests/test_shared.hpp @@ -0,0 +1,118 @@ + + +#include +#include + +#include +#include + +#include "epanet2_2.h" + + +// Custom test to check the minimum number of correct decimal digits between +// the test and the ref vectors. +boost::test_tools::predicate_result check_cdd_double(std::vector& test, + std::vector& ref, long cdd_tol){ + float tmp, min_cdd = 10.0; + + // TODO: What if the vectors aren't the same length? + + std::vector::iterator test_it; + std::vector::iterator ref_it; + + for (test_it = test.begin(), ref_it = ref.begin(); + (test_it < test.end()) && (ref_it < ref.end()); + ++test_it, ++ref_it) + { + if (*test_it != *ref_it) { + // Compute log absolute error + tmp = abs(*test_it - *ref_it); + if (tmp < 1.0e-7) + tmp = 1.0e-7; + + else if (tmp > 2.0) + tmp = 1.0; + + tmp = -log10(tmp); + if (tmp < 0.0) + tmp = 0.0; + + if (tmp < min_cdd) + min_cdd = tmp; + } + } + + return floor(min_cdd) >= cdd_tol; +} + +boost::test_tools::predicate_result check_cdd_float(std::vector& test, + std::vector& ref, long cdd_tol){ + float tmp, min_cdd = 10.0; + + // TODO: What if the vectors aren't the same length? + + std::vector::iterator test_it; + std::vector::iterator ref_it; + + for (test_it = test.begin(), ref_it = ref.begin(); + (test_it < test.end()) && (ref_it < ref.end()); + ++test_it, ++ref_it) + { + if (*test_it != *ref_it) { + // Compute log absolute error + tmp = abs(*test_it - *ref_it); + if (tmp < 1.0e-7f) + tmp = 1.0e-7f; + + else if (tmp > 2.0f) + tmp = 1.0f; + + tmp = -log10(tmp); + if (tmp < 0.0f) + tmp = 0.0f; + + if (tmp < min_cdd) + min_cdd = tmp; + } + } + + return floor(min_cdd) >= cdd_tol; +} + +boost::test_tools::predicate_result check_string(std::string test, std::string ref) +{ + if (ref.compare(test) == 0) + return true; + else + return false; +} + + +// NOTE: Project Home needs to be updated to run unit test +#define DATA_PATH_INP "./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_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()); + } + + ~FixtureOpenClose() { + error = EN_close(ph); + EN_deleteproject(&ph); + } + + std::string path_inp; + std::string path_rpt; + std::string path_out; + + int error; + EN_Project ph; +}; From 9f1b46b66a960bc50c39ae3ae18c8e376d134b3b Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Fri, 1 Mar 2019 15:16:27 -0500 Subject: [PATCH 19/33] Fixing bug in gettimeparam --- src/epanet.c | 12 +++++++++--- tests/test_rprtanlys.cpp | 26 ++++++++++++++++++++++++++ tests/test_shared.hpp | 2 +- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/epanet.c b/src/epanet.c index a89d648..fd18a07 100644 --- a/src/epanet.c +++ b/src/epanet.c @@ -1377,12 +1377,12 @@ int DLLEXPORT EN_gettimeparam(EN_Project p, int param, long *value) case EN_REPORTSTART: *value = time->Rstart; break; - case EN_STATISTIC: - *value = rpt->Tstatflag; - break; case EN_RULESTEP: *value = time->Rulestep; break; + case EN_STATISTIC: + *value = rpt->Tstatflag; + break; case EN_PERIODS: *value = rpt->Nperiods; break; @@ -1392,6 +1392,10 @@ int DLLEXPORT EN_gettimeparam(EN_Project p, int param, long *value) case EN_HTIME: *value = time->Htime; break; + case EN_QTIME: + *value = time->Qtime; + case EN_HALTFLAG: + break; case EN_NEXTEVENT: *value = time->Hstep; // find the lesser of the hydraulic time step length, // or the time to next full/empty tank @@ -1402,6 +1406,8 @@ int DLLEXPORT EN_gettimeparam(EN_Project p, int param, long *value) i = tanktimestep(p, value); *value = i; break; + default: + return 251; } return 0; } diff --git a/tests/test_rprtanlys.cpp b/tests/test_rprtanlys.cpp index f91e166..42e7af8 100644 --- a/tests/test_rprtanlys.cpp +++ b/tests/test_rprtanlys.cpp @@ -85,4 +85,30 @@ BOOST_FIXTURE_TEST_CASE(test_anlys_getoption, FixtureOpenClose) BOOST_CHECK(error == 251); } +BOOST_FIXTURE_TEST_CASE(test_anlys_gettimeparam, FixtureOpenClose) +{ + int i; + long array[16]; + + std::vector test; + vector ref = {86400, 3600, 300, 7200, 0, 3600, 0, 360, 0, 25, 0, 86400, 86400, 0, 3600, 0}; + + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_solveQ(ph); + BOOST_REQUIRE(error == 0); + + + for (i=EN_DURATION; i<=EN_NEXTEVENTTANK; i++) { + error = EN_gettimeparam(ph, i, &array[i]); + BOOST_REQUIRE(error == 0); + } + + test.assign(array, array + 16); + BOOST_CHECK_EQUAL_COLLECTIONS(ref.begin(), ref.end(), test.begin(), test.end()); + + error = EN_gettimeparam(ph, 18, &array[0]); + BOOST_CHECK(error == 251); +} BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_shared.hpp b/tests/test_shared.hpp index e852754..0cae52c 100644 --- a/tests/test_shared.hpp +++ b/tests/test_shared.hpp @@ -13,7 +13,7 @@ // the test and the ref vectors. boost::test_tools::predicate_result check_cdd_double(std::vector& test, std::vector& ref, long cdd_tol){ - float tmp, min_cdd = 10.0; + double tmp, min_cdd = 10.0; // TODO: What if the vectors aren't the same length? From b5582347159f32d63b38079bcd139ed3cb4c004c Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Fri, 1 Mar 2019 16:05:03 -0500 Subject: [PATCH 20/33] Moving fixture from output test to shared header. Fixing build --- tests/test_hydrqual.cpp | 12 +++++----- tests/test_output.cpp | 49 +++++++++------------------------------- tests/test_proj.cpp | 12 +++++----- tests/test_rprtanlys.cpp | 12 +++++----- tests/test_shared.hpp | 29 +++++++++++++++++++++++- 5 files changed, 57 insertions(+), 57 deletions(-) diff --git a/tests/test_hydrqual.cpp b/tests/test_hydrqual.cpp index 8db105c..d5295c5 100644 --- a/tests/test_hydrqual.cpp +++ b/tests/test_hydrqual.cpp @@ -9,13 +9,13 @@ //#define BOOST_TEST_DYN_LINK -#ifdef _WIN32 -#define _CRTDBG_MAP_ALLOC +//#ifdef _WIN32 +//#define _CRTDBG_MAP_ALLOC +//#include +//#include +//#else #include -#include -#else -#include -#endif +//#endif #define BOOST_TEST_MODULE hydqual diff --git a/tests/test_output.cpp b/tests/test_output.cpp index e2098e3..82d70e7 100644 --- a/tests/test_output.cpp +++ b/tests/test_output.cpp @@ -23,10 +23,6 @@ #include "test_shared.hpp" -#include "epanet_output.h" - -#define DATA_PATH_OUTPUT "./example1.out" - BOOST_AUTO_TEST_SUITE (test_output_auto) @@ -47,33 +43,10 @@ BOOST_AUTO_TEST_CASE(OpenCloseTest) { BOOST_AUTO_TEST_SUITE_END() -struct Fixture{ - Fixture() { - path = std::string(DATA_PATH_OUTPUT); - - error = ENR_init(&p_handle); - ENR_clearError(p_handle); - error = ENR_open(p_handle, path.c_str()); - - array = NULL; - array_dim = 0; - } - ~Fixture() { - free((void*)array); - error = ENR_close(&p_handle); - } - - std::string path; - int error; - ENR_Handle p_handle; - - float* array; - int array_dim; -}; BOOST_AUTO_TEST_SUITE(test_output_fixture) -BOOST_FIXTURE_TEST_CASE(test_getNetSize, Fixture) +BOOST_FIXTURE_TEST_CASE(test_getNetSize, FixtureOutput) { int *i_array = NULL; @@ -91,7 +64,7 @@ BOOST_FIXTURE_TEST_CASE(test_getNetSize, Fixture) free((void*)i_array); } -BOOST_FIXTURE_TEST_CASE(test_getUnits, Fixture) { +BOOST_FIXTURE_TEST_CASE(test_getUnits, FixtureOutput) { int flag; error = ENR_getUnits(p_handle, ENR_qualUnits, &flag); @@ -100,7 +73,7 @@ BOOST_FIXTURE_TEST_CASE(test_getUnits, Fixture) { BOOST_CHECK_EQUAL(flag, ENR_MGL); } -BOOST_FIXTURE_TEST_CASE(test_getElementName, Fixture) { +BOOST_FIXTURE_TEST_CASE(test_getElementName, FixtureOutput) { char* name; int length, index = 1; @@ -114,7 +87,7 @@ BOOST_FIXTURE_TEST_CASE(test_getElementName, Fixture) { free((void *)name); } -BOOST_FIXTURE_TEST_CASE(test_getNodeAttribute, Fixture) { +BOOST_FIXTURE_TEST_CASE(test_getNodeAttribute, FixtureOutput) { error = ENR_getNodeAttribute(p_handle, 1, ENR_quality, &array, &array_dim); BOOST_REQUIRE(error == 0); @@ -137,7 +110,7 @@ BOOST_FIXTURE_TEST_CASE(test_getNodeAttribute, Fixture) { BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); } -BOOST_FIXTURE_TEST_CASE(test_getLinkAttribute, Fixture) { +BOOST_FIXTURE_TEST_CASE(test_getLinkAttribute, FixtureOutput) { error = ENR_getLinkAttribute(p_handle, 1, ENR_flow, &array ,&array_dim); BOOST_REQUIRE(error == 0); @@ -162,7 +135,7 @@ BOOST_FIXTURE_TEST_CASE(test_getLinkAttribute, Fixture) { BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); } -BOOST_FIXTURE_TEST_CASE(test_getNodeResult, Fixture) { +BOOST_FIXTURE_TEST_CASE(test_getNodeResult, FixtureOutput) { error = ENR_getNodeResult(p_handle, 1, 2, &array, &array_dim); BOOST_REQUIRE(error == 0); @@ -178,7 +151,7 @@ BOOST_FIXTURE_TEST_CASE(test_getNodeResult, Fixture) { BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); } -BOOST_FIXTURE_TEST_CASE(test_getLinkResult, Fixture) { +BOOST_FIXTURE_TEST_CASE(test_getLinkResult, FixtureOutput) { error = ENR_getLinkResult(p_handle, 24, 13, &array, &array_dim); BOOST_REQUIRE(error == 0); @@ -198,7 +171,7 @@ BOOST_FIXTURE_TEST_CASE(test_getLinkResult, Fixture) { BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); } -BOOST_FIXTURE_TEST_CASE(test_getNodeSeries, Fixture){ +BOOST_FIXTURE_TEST_CASE(test_getNodeSeries, FixtureOutput){ error = ENR_getNodeSeries(p_handle, 2, ENR_pressure, 0, 10, &array, &array_dim); BOOST_REQUIRE(error == 0); @@ -220,7 +193,7 @@ BOOST_FIXTURE_TEST_CASE(test_getNodeSeries, Fixture){ BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); } -BOOST_FIXTURE_TEST_CASE(test_getLinkSeries, Fixture) { +BOOST_FIXTURE_TEST_CASE(test_getLinkSeries, FixtureOutput) { error = ENR_getLinkSeries(p_handle, 2, ENR_flow, 0, 10, &array, &array_dim); BOOST_REQUIRE(error == 0); @@ -242,7 +215,7 @@ BOOST_FIXTURE_TEST_CASE(test_getLinkSeries, Fixture) { BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); } -BOOST_FIXTURE_TEST_CASE(test_getNetReacts, Fixture) { +BOOST_FIXTURE_TEST_CASE(test_getNetReacts, FixtureOutput) { error = ENR_getNetReacts(p_handle, &array, &array_dim); BOOST_REQUIRE(error == 0); @@ -258,7 +231,7 @@ BOOST_FIXTURE_TEST_CASE(test_getNetReacts, Fixture) { BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 2)); } -BOOST_FIXTURE_TEST_CASE(test_getEnergyUsage, Fixture) { +BOOST_FIXTURE_TEST_CASE(test_getEnergyUsage, FixtureOutput) { int linkIdx; diff --git a/tests/test_proj.cpp b/tests/test_proj.cpp index d88872a..5c4d1a9 100644 --- a/tests/test_proj.cpp +++ b/tests/test_proj.cpp @@ -9,13 +9,13 @@ //#define BOOST_TEST_DYN_LINK -#ifdef _WIN32 -#define _CRTDBG_MAP_ALLOC +//#ifdef _WIN32 +//#define _CRTDBG_MAP_ALLOC +//#include +//#include +//#else #include -#include -#else -#include -#endif +//#endif #define BOOST_TEST_MODULE "project" diff --git a/tests/test_rprtanlys.cpp b/tests/test_rprtanlys.cpp index 42e7af8..57e3488 100644 --- a/tests/test_rprtanlys.cpp +++ b/tests/test_rprtanlys.cpp @@ -9,13 +9,13 @@ //#define BOOST_TEST_DYN_LINK -#ifdef _WIN32 -#define _CRTDBG_MAP_ALLOC +//#ifdef _WIN32 +//#define _CRTDBG_MAP_ALLOC +//#include +//#include +//#else #include -#include -#else -#include -#endif +//#endif #define BOOST_TEST_MODULE hydqual diff --git a/tests/test_shared.hpp b/tests/test_shared.hpp index 0cae52c..07bf161 100644 --- a/tests/test_shared.hpp +++ b/tests/test_shared.hpp @@ -7,6 +7,7 @@ #include #include "epanet2_2.h" +#include "epanet_output.h" // Custom test to check the minimum number of correct decimal digits between @@ -93,7 +94,6 @@ boost::test_tools::predicate_result check_string(std::string test, std::string r #define DATA_PATH_RPT "./test.rpt" #define DATA_PATH_OUT "./test.out" - struct FixtureOpenClose{ FixtureOpenClose() { path_inp = std::string(DATA_PATH_INP); @@ -116,3 +116,30 @@ struct FixtureOpenClose{ int error; EN_Project ph; }; + + +#define DATA_PATH_OUTPUT "./example1.out" + +struct FixtureOutput{ + FixtureOutput() { + path = std::string(DATA_PATH_OUTPUT); + + error = ENR_init(&p_handle); + ENR_clearError(p_handle); + error = ENR_open(p_handle, path.c_str()); + + array = NULL; + array_dim = 0; + } + ~FixtureOutput() { + free((void*)array); + error = ENR_close(&p_handle); + } + + std::string path; + int error; + ENR_Handle p_handle; + + float* array; + int array_dim; +}; From 4bbf4e2b1e2dd5da3593c5ef4dca29392e0a0c31 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Fri, 1 Mar 2019 16:41:03 -0500 Subject: [PATCH 21/33] Adding include paths for tests build --- tests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index bb521e0..abb0a31 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -28,7 +28,7 @@ if(MSVC) endif(MSVC) set(Boost_THREAD_FOUND OFF) find_package(Boost COMPONENTS system thread filesystem) -include_directories (${Boost_INCLUDE_DIRS}) +include_directories (${Boost_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/tools/epanet-output/include) #I like to keep test files in a separate source directory called test From 73a6c1c847ed7df21759c1b3c79ab8de60beb6f9 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Fri, 1 Mar 2019 17:55:45 -0500 Subject: [PATCH 22/33] Separating header for test_output --- tests/CMakeLists.txt | 2 +- tests/test_output.cpp | 79 ++++++++++++++++++++++++++++++++++++++++--- tests/test_shared.hpp | 63 +--------------------------------- 3 files changed, 77 insertions(+), 67 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index abb0a31..bb521e0 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -28,7 +28,7 @@ if(MSVC) endif(MSVC) set(Boost_THREAD_FOUND OFF) find_package(Boost COMPONENTS system thread filesystem) -include_directories (${Boost_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/tools/epanet-output/include) +include_directories (${Boost_INCLUDE_DIRS}) #I like to keep test files in a separate source directory called test diff --git a/tests/test_output.cpp b/tests/test_output.cpp index 82d70e7..6b7766f 100644 --- a/tests/test_output.cpp +++ b/tests/test_output.cpp @@ -13,17 +13,64 @@ //#define BOOST_TEST_DYN_LINK - - #include #include +#include +#include - +#include #define BOOST_TEST_MODULE "output" +#include -#include "test_shared.hpp" +#include "epanet_output.h" +boost::test_tools::predicate_result check_cdd_float(std::vector& test, + std::vector& ref, long cdd_tol){ + float tmp, min_cdd = 10.0; + + // TODO: What if the vectors aren't the same length? + + std::vector::iterator test_it; + std::vector::iterator ref_it; + + for (test_it = test.begin(), ref_it = ref.begin(); + (test_it < test.end()) && (ref_it < ref.end()); + ++test_it, ++ref_it) + { + if (*test_it != *ref_it) { + // Compute log absolute error + tmp = abs(*test_it - *ref_it); + if (tmp < 1.0e-7f) + tmp = 1.0e-7f; + + else if (tmp > 2.0f) + tmp = 1.0f; + + tmp = -log10(tmp); + if (tmp < 0.0f) + tmp = 0.0f; + + if (tmp < min_cdd) + min_cdd = tmp; + } + } + + return floor(min_cdd) >= cdd_tol; +} + + +boost::test_tools::predicate_result check_string(std::string test, std::string ref) +{ + if (ref.compare(test) == 0) + return true; + else + return false; +} + + +#define DATA_PATH_OUTPUT "./example1.out" + BOOST_AUTO_TEST_SUITE (test_output_auto) BOOST_AUTO_TEST_CASE(OpenCloseTest) { @@ -43,6 +90,30 @@ BOOST_AUTO_TEST_CASE(OpenCloseTest) { BOOST_AUTO_TEST_SUITE_END() +struct FixtureOutput{ + FixtureOutput() { + path = std::string(DATA_PATH_OUTPUT); + + error = ENR_init(&p_handle); + ENR_clearError(p_handle); + error = ENR_open(p_handle, path.c_str()); + + array = NULL; + array_dim = 0; + } + ~FixtureOutput() { + free((void*)array); + error = ENR_close(&p_handle); + } + + std::string path; + int error; + ENR_Handle p_handle; + + float* array; + int array_dim; +}; + BOOST_AUTO_TEST_SUITE(test_output_fixture) diff --git a/tests/test_shared.hpp b/tests/test_shared.hpp index 07bf161..91176ca 100644 --- a/tests/test_shared.hpp +++ b/tests/test_shared.hpp @@ -7,7 +7,7 @@ #include #include "epanet2_2.h" -#include "epanet_output.h" + // Custom test to check the minimum number of correct decimal digits between @@ -46,40 +46,6 @@ boost::test_tools::predicate_result check_cdd_double(std::vector& test, return floor(min_cdd) >= cdd_tol; } -boost::test_tools::predicate_result check_cdd_float(std::vector& test, - std::vector& ref, long cdd_tol){ - float tmp, min_cdd = 10.0; - - // TODO: What if the vectors aren't the same length? - - std::vector::iterator test_it; - std::vector::iterator ref_it; - - for (test_it = test.begin(), ref_it = ref.begin(); - (test_it < test.end()) && (ref_it < ref.end()); - ++test_it, ++ref_it) - { - if (*test_it != *ref_it) { - // Compute log absolute error - tmp = abs(*test_it - *ref_it); - if (tmp < 1.0e-7f) - tmp = 1.0e-7f; - - else if (tmp > 2.0f) - tmp = 1.0f; - - tmp = -log10(tmp); - if (tmp < 0.0f) - tmp = 0.0f; - - if (tmp < min_cdd) - min_cdd = tmp; - } - } - - return floor(min_cdd) >= cdd_tol; -} - boost::test_tools::predicate_result check_string(std::string test, std::string ref) { if (ref.compare(test) == 0) @@ -116,30 +82,3 @@ struct FixtureOpenClose{ int error; EN_Project ph; }; - - -#define DATA_PATH_OUTPUT "./example1.out" - -struct FixtureOutput{ - FixtureOutput() { - path = std::string(DATA_PATH_OUTPUT); - - error = ENR_init(&p_handle); - ENR_clearError(p_handle); - error = ENR_open(p_handle, path.c_str()); - - array = NULL; - array_dim = 0; - } - ~FixtureOutput() { - free((void*)array); - error = ENR_close(&p_handle); - } - - std::string path; - int error; - ENR_Handle p_handle; - - float* array; - int array_dim; -}; From d3e9c11d719a43c054a75d951b69042119ef4ec2 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Mon, 4 Mar 2019 17:42:37 -0500 Subject: [PATCH 23/33] Improving bash scripts for running reg tests --- .gitignore | 1 + tools/before-test.sh | 71 +++++++++++++++++++++++++++++++++----------- tools/gen-config.sh | 18 +++++------ tools/run-nrtest.sh | 43 +++++++++++++++++---------- 4 files changed, 89 insertions(+), 44 deletions(-) diff --git a/.gitignore b/.gitignore index a20656a..8566bb4 100755 --- a/.gitignore +++ b/.gitignore @@ -225,6 +225,7 @@ nrtestsuite/ tests/data/ #Cmake stuff +__cmake_systeminformation/ buildprod*/ *_export.h diff --git a/tools/before-test.sh b/tools/before-test.sh index 72b1a7e..5e3d805 100755 --- a/tools/before-test.sh +++ b/tools/before-test.sh @@ -1,6 +1,6 @@ #! /bin/bash -# +# # before-test.sh - Prepares Travis CI worker to run epanet regression tests # # Date Created: 04/04/2018 @@ -8,25 +8,62 @@ # Author: Michael E. Tryby # US EPA - ORD/NRMRL # -# Arguments: -# 1 - relative path regression test file staging location -# 2 - absolute path to location of software under test -# 3 - build identifier for software under test -# -# Note: +# Arguments: +# 1 - (platform) +# 2 - (build id for reference) +# 3 - (build id for software under test) +# 4 - (version id for software under test) +# 5 - (relative path regression test file staging location) +# +# Note: # Tests and benchmark files are stored in the epanet-example-networks repo. -# This script retreives them using a stable URL associated with a release on -# GitHub and stages the files for nrtest to run. The script assumes that -# before-test.sh and gen-config.sh are located together in the same folder. +# This script retreives them using a stable URL associated with a release on +# GitHub and stages the files for nrtest to run. The script assumes that +# before-test.sh and gen-config.sh are located together in the same folder. + +if [ -z $1 ]; then + unset PLATFORM; +else + PLATFORM=$1; +fi + +if [ -z $2 ]; then + echo "ERROR: REF_BUILD_ID must be defined"; exit 1; +else + REF_BUILD_ID=$2; +fi + +if [ -z $3 ]; then + SUT_BUILD_ID="local"; +else + SUT_BUILD_ID=$3; +fi + +if [ -z $4 ]; then + SUT_VERSION="unknown"; +else + SUT_VERSION=$4; fi + +if [ -z $5 ]; then + TEST_HOME="nrtestsuite"; +else + TEST_HOME=$5; fi + SCRIPT_HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -TEST_HOME=$1 +BUILD_HOME="$(dirname "$SCRIPT_HOME")" -EXAMPLES_VER="1.0.2-dev.1" -BENCHMARK_VER="220dev1" -TEST_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/archive/v${EXAMPLES_VER}.tar.gz" -BENCH_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/releases/download/v${EXAMPLES_VER}/epanet-benchmark-${BENCHMARK_VER}.tar.gz" +SUT_PATH=(`find $BUILD_HOME -name "bin" -type d`) + + +# TODO: determine platform + +# determine latest tag from GitHub API +LATEST_TAG=$(curl --silent "https://api.github.com/repos/openwateranalytics/epanet-example-networks/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")') + +TEST_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/archive/${LATEST_TAG}.tar.gz" +BENCH_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/releases/download/${LATEST_TAG}/benchmark-${PLATFORM}-${REF_BUILD_ID}.tar.gz" echo INFO: Staging files for regression testing @@ -47,7 +84,7 @@ curl -fsSL -o benchmark.tar.gz ${BENCH_URL} # extract tests and benchmarks tar xzf examples.tar.gz -ln -s epanet-example-networks-${EXAMPLES_VER}/epanet-tests tests +ln -s epanet-example-networks-${LATEST_TAG:1}/epanet-tests tests mkdir benchmark tar xzf benchmark.tar.gz -C benchmark @@ -55,4 +92,4 @@ tar xzf benchmark.tar.gz -C benchmark # generate json configuration file for software under test mkdir apps -${SCRIPT_HOME}/gen-config.sh $2 > apps/epanet-$3.json +${SCRIPT_HOME}/gen-config.sh ${SUT_PATH} ${PLATFORM} ${SUT_BUILD_ID} ${SUT_VERSION} > apps/epanet-${SUT_BUILD_ID}.json diff --git a/tools/gen-config.sh b/tools/gen-config.sh index a937054..cb9620c 100755 --- a/tools/gen-config.sh +++ b/tools/gen-config.sh @@ -1,6 +1,6 @@ #! /bin/bash -# +# # gen-config.sh - Generates nrtest app configuration file for test executable # # Date Created: 10/16/2017 @@ -10,10 +10,9 @@ # # Arguments: # 1 - absolute path to test executable -# -# NOT IMPLEMENTED YET -# 2 - test executable version number -# 3 - build description +# 2 - platform +# 3 - SUT build id +# 4 - SUT version id # unameOut="$(uname -s)" @@ -28,18 +27,15 @@ case "${unameOut}" in abs_build_path="$( echo "$1" | sed -e 's#/c##' )" test_cmd="runepanet.exe" ;; - + *) # Machine unknown esac -version="" -build_description="" - cat< Date: Tue, 5 Mar 2019 14:21:26 -0500 Subject: [PATCH 24/33] Eliminating ref_build_id as required argument on run-nrtest scripts --- tools/before-test.cmd | 4 +++- tools/before-test.sh | 3 ++- tools/run-nrtest.sh | 8 ++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/tools/before-test.cmd b/tools/before-test.cmd index 4926189..f663bc1 100644 --- a/tools/before-test.cmd +++ b/tools/before-test.cmd @@ -80,9 +80,11 @@ curl -fsSL -o examples.zip %TESTFILES_URL% curl -fsSL -o benchmark.zip %BENCHFILES_URL% -:: extract tests and benchmarks +:: extract tests, benchmarks, and manifest 7z x examples.zip *\epanet-tests\* > nul 7z x benchmark.zip -obenchmark\ > nul +7z e benchmark.zip -o. manifest.json -r + :: set up symlink for tests directory mklink /D .\tests .\epanet-example-networks-%LATEST_TAG:~1%\epanet-tests > nul diff --git a/tools/before-test.sh b/tools/before-test.sh index 5e3d805..0fa4c51 100755 --- a/tools/before-test.sh +++ b/tools/before-test.sh @@ -82,12 +82,13 @@ curl -fsSL -o examples.tar.gz ${TEST_URL} curl -fsSL -o benchmark.tar.gz ${BENCH_URL} -# extract tests and benchmarks +# extract tests, benchmarks, and manifest tar xzf examples.tar.gz ln -s epanet-example-networks-${LATEST_TAG:1}/epanet-tests tests mkdir benchmark tar xzf benchmark.tar.gz -C benchmark +tar xzf benchmark.tar.gz --wildcards --no-anchored --strip-components=1 '*/manifest.json' -C . # generate json configuration file for software under test diff --git a/tools/run-nrtest.sh b/tools/run-nrtest.sh index 9b093b4..077dd24 100755 --- a/tools/run-nrtest.sh +++ b/tools/run-nrtest.sh @@ -69,10 +69,9 @@ print_usage() { # Default option values compare='true' -ref_build_id='' +ref_build_id= sut_build_id='local' test_path='nrtestsuite' -version='vXXX' while getopts "cr:s:t:" flag; do case "${flag}" in @@ -87,9 +86,10 @@ done shift $(($OPTIND - 1)) +# determine ref_build_id from manifest file if [ -z $ref_build_id ]; then - echo "ERROR: REF_BUILD_ID must be defined" - exit 1; + description=(`cat ${test_path}/manifest.json | jq '.Application.description | splits(" ")'`) + ref_build_id=${description[1]//\"/} fi # Invoke command From 3c00e8e2369513a9064b293388eaeac2eaa67b7b Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Tue, 5 Mar 2019 14:49:42 -0500 Subject: [PATCH 25/33] Updating Travis CI to use new build scripts --- .travis.yml | 4 ++-- tools/run-nrtest.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9da7e54..7daa659 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,8 +48,8 @@ script: # run regression tests - cd $EPANET_HOME - pip install -r tools/requirements.txt - - tools/before-test.sh $TEST_HOME $EPANET_HOME/$BUILD_HOME/bin $TRAVIS_COMMIT - - tools/run-nrtest.sh -c -t $TEST_HOME -v $TRAVIS_COMMIT + - tools/before-test.sh $REF_BUILD_ID $SUT_BUILD_ID $TRAVIS_COMMIT + - tools/run-nrtest.sh -c -r $REF_BUILD_ID -s $SUT_BUILD_ID after_success: - bash <(curl -s https://codecov.io/bash) diff --git a/tools/run-nrtest.sh b/tools/run-nrtest.sh index 077dd24..cefeac6 100755 --- a/tools/run-nrtest.sh +++ b/tools/run-nrtest.sh @@ -69,7 +69,7 @@ print_usage() { # Default option values compare='true' -ref_build_id= +ref_build_id='unknown' sut_build_id='local' test_path='nrtestsuite' @@ -87,7 +87,7 @@ shift $(($OPTIND - 1)) # determine ref_build_id from manifest file -if [ -z $ref_build_id ]; then +if [[ $ref_build_id == 'unknown' ]] && [[ $compare == 'true' ]]; then description=(`cat ${test_path}/manifest.json | jq '.Application.description | splits(" ")'`) ref_build_id=${description[1]//\"/} fi From 8110948148d762b061ad6b03f747a34b3445feef Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Tue, 5 Mar 2019 14:50:27 -0500 Subject: [PATCH 26/33] Updating Travis CI --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7daa659..e430fc1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -49,7 +49,7 @@ script: - cd $EPANET_HOME - pip install -r tools/requirements.txt - tools/before-test.sh $REF_BUILD_ID $SUT_BUILD_ID $TRAVIS_COMMIT - - tools/run-nrtest.sh -c -r $REF_BUILD_ID -s $SUT_BUILD_ID + - tools/run-nrtest.sh -c -s $SUT_BUILD_ID after_success: - bash <(curl -s https://codecov.io/bash) From 2f82deef7c760829134c47e76832e5a1f3c08437 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Tue, 5 Mar 2019 15:03:03 -0500 Subject: [PATCH 27/33] Adding SUT_BUILD_ID to Travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index e430fc1..891b18a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,6 +20,7 @@ python: env: global: + - SUT_BUILD_ID=$TRAVIS_JOB_NUMBER - EPANET_HOME=`pwd` - BUILD_HOME=buildprod - TEST_HOME=nrtestsuite From e1067bd0c90196ba37ec9c758d03f9a310d5ea83 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Tue, 5 Mar 2019 15:56:50 -0500 Subject: [PATCH 28/33] Adding platform and sut_build_id to travis --- .travis.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 891b18a..f2bf559 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,13 +14,15 @@ matrix: - boost1.67 env: - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7" + - PLATFORM="linux" + - REF_BUILD_ID="220dev1" python: - "3.6" env: global: - - SUT_BUILD_ID=$TRAVIS_JOB_NUMBER + - SUT_BUILD_ID=$TRAVIS_JOB_NUMBER - EPANET_HOME=`pwd` - BUILD_HOME=buildprod - TEST_HOME=nrtestsuite @@ -49,7 +51,7 @@ script: # run regression tests - cd $EPANET_HOME - pip install -r tools/requirements.txt - - tools/before-test.sh $REF_BUILD_ID $SUT_BUILD_ID $TRAVIS_COMMIT + - tools/before-test.sh $PLATFORM $REF_BUILD_ID $SUT_BUILD_ID $TRAVIS_COMMIT - tools/run-nrtest.sh -c -s $SUT_BUILD_ID after_success: From f3ad69d535b93ecd689c9188004d979d9dd03b14 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Tue, 5 Mar 2019 16:24:17 -0500 Subject: [PATCH 29/33] Improving error handling --- tools/before-test.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/before-test.sh b/tools/before-test.sh index 0fa4c51..d5586f2 100755 --- a/tools/before-test.sh +++ b/tools/before-test.sh @@ -60,7 +60,7 @@ SUT_PATH=(`find $BUILD_HOME -name "bin" -type d`) # TODO: determine platform # determine latest tag from GitHub API -LATEST_TAG=$(curl --silent "https://api.github.com/repos/openwateranalytics/epanet-example-networks/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")') +LATEST_TAG=(`curl --silent "https://api.github.com/repos/openwateranalytics/epanet-example-networks/releases/latest" | jq -r .tag_name`) TEST_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/archive/${LATEST_TAG}.tar.gz" BENCH_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/releases/download/${LATEST_TAG}/benchmark-${PLATFORM}-${REF_BUILD_ID}.tar.gz" @@ -75,11 +75,16 @@ fi mkdir ${TEST_HOME} cd ${TEST_HOME} + # retrieve epanet-examples for regression testing curl -fsSL -o examples.tar.gz ${TEST_URL} +if ["$?" != "0"]; THEN + echo "ERROR: curl failed ${TEST_URL}" # retrieve epanet benchmark results curl -fsSL -o benchmark.tar.gz ${BENCH_URL} +if ["$?" != "0"]; THEN + echo "ERROR: curl failed ${BENCH_URL}" # extract tests, benchmarks, and manifest From f33257fce7c7646bd9f8d7b2537979a8a1f6ce32 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Tue, 5 Mar 2019 16:48:35 -0500 Subject: [PATCH 30/33] Trouble shooting error handling --- tools/before-test.sh | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tools/before-test.sh b/tools/before-test.sh index d5586f2..c7d152e 100755 --- a/tools/before-test.sh +++ b/tools/before-test.sh @@ -77,15 +77,14 @@ cd ${TEST_HOME} # retrieve epanet-examples for regression testing -curl -fsSL -o examples.tar.gz ${TEST_URL} -if ["$?" != "0"]; THEN - echo "ERROR: curl failed ${TEST_URL}" +if ! curl -fsSL -o examples.tar.gz ${TEST_URL}; then + echo "ERROR: curl - ${TEST_URL}" +fi # retrieve epanet benchmark results -curl -fsSL -o benchmark.tar.gz ${BENCH_URL} -if ["$?" != "0"]; THEN - echo "ERROR: curl failed ${BENCH_URL}" - +if ! curl -fsSL -o benchmark.tar.gz ${BENCH_URL}; then + echo "ERROR: curl - ${BENCH_URL}" +fi # extract tests, benchmarks, and manifest tar xzf examples.tar.gz From 12bbeb492185e1059de4276518c19cf82f40651b Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Tue, 5 Mar 2019 17:24:14 -0500 Subject: [PATCH 31/33] Adding jq to install and adding error handling on curl call --- .travis.yml | 1 + tools/before-test.sh | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f2bf559..4c65360 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,6 +32,7 @@ before_install: - eval "${MATRIX_EVAL}" install: + - sudo apt-get install jq # - sudo apt-get install -y libboost-test-dev # - sudo apt-get install -y libboost-thread-dev diff --git a/tools/before-test.sh b/tools/before-test.sh index c7d152e..464101a 100755 --- a/tools/before-test.sh +++ b/tools/before-test.sh @@ -60,7 +60,12 @@ SUT_PATH=(`find $BUILD_HOME -name "bin" -type d`) # TODO: determine platform # determine latest tag from GitHub API -LATEST_TAG=(`curl --silent "https://api.github.com/repos/openwateranalytics/epanet-example-networks/releases/latest" | jq -r .tag_name`) +LATEST_URL="https://api.github.com/repos/openwateranalytics/epanet-example-networks/releases/latest" +LATEST_TAG=(`curl --silent ${LATEST_URL} | jq -r .tag_name`) +if [ -z $LATEST_TAG ]; then + echo "ERROR: curl - ${LATEST_URL}" + exit 1 +fi TEST_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/archive/${LATEST_TAG}.tar.gz" BENCH_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/releases/download/${LATEST_TAG}/benchmark-${PLATFORM}-${REF_BUILD_ID}.tar.gz" From 306c54fb961e02bcb255cc72782dcf55cfc9fd6f Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Tue, 5 Mar 2019 17:43:54 -0500 Subject: [PATCH 32/33] Redirecting 7z output to nul --- tools/before-test.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/before-test.cmd b/tools/before-test.cmd index f663bc1..0449209 100644 --- a/tools/before-test.cmd +++ b/tools/before-test.cmd @@ -83,7 +83,7 @@ curl -fsSL -o benchmark.zip %BENCHFILES_URL% :: extract tests, benchmarks, and manifest 7z x examples.zip *\epanet-tests\* > nul 7z x benchmark.zip -obenchmark\ > nul -7z e benchmark.zip -o. manifest.json -r +7z e benchmark.zip -o. manifest.json -r > nul :: set up symlink for tests directory From da23f25411bcdfa1c8cfe2be71504bda79253af1 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Tue, 5 Mar 2019 17:45:27 -0500 Subject: [PATCH 33/33] Tweaking comments --- tools/before-test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/before-test.sh b/tools/before-test.sh index 464101a..7588d16 100755 --- a/tools/before-test.sh +++ b/tools/before-test.sh @@ -63,7 +63,7 @@ SUT_PATH=(`find $BUILD_HOME -name "bin" -type d`) LATEST_URL="https://api.github.com/repos/openwateranalytics/epanet-example-networks/releases/latest" LATEST_TAG=(`curl --silent ${LATEST_URL} | jq -r .tag_name`) if [ -z $LATEST_TAG ]; then - echo "ERROR: curl - ${LATEST_URL}" + echo "ERROR: curl | jq - ${LATEST_URL}" exit 1 fi