Files
EPANET/tests/test_demand_data.cpp
Michael Tryby 7537be1ec9 Work in progress
Working on demand lists
2019-04-19 18:01:06 -04:00

347 lines
8.1 KiB
C++

/*
******************************************************************************
Project: OWA EPANET
Version: 2.2
Module: /test_demand_data.cpp
Description: tests demand data list node struct
Authors: see AUTHORS
Copyright: see AUTHORS
License: see LICENSE
Last Updated: 04/18/2019
******************************************************************************
*/
#define BOOST_TEST_MODULE demand_data
#include <boost/test/unit_test.hpp>
#include "demand.h"
#include "epanet2_2.h"
#define DATA_PATH_NET1 "./net1.inp"
#define DATA_PATH_TMP "./tmp.inp"
#define DATA_PATH_RPT "./test.rpt"
#define DATA_PATH_OUT "./test.out"
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_demand_data)
BOOST_AUTO_TEST_CASE(test_create_destroy_demand_list)
{
list_t *dlist;
dlist = create_demand_list(100.0, 1, "CUB_SCOUT_DAY_CAMP");
BOOST_CHECK(dlist != NULL);
delete_list(dlist);
}
BOOST_AUTO_TEST_CASE (test_create_destroy)
{
void *data = NULL;
data = create_demand_data(100.0, 1, NULL);
BOOST_CHECK(data != NULL);
delete_demand_data(&data);
data = NULL;
data = create_demand_data(100.0, 1, "CUB_SCOUT_BASE_CAMP");
BOOST_CHECK(data != NULL);
delete_demand_data(&data);
}
BOOST_AUTO_TEST_CASE(test_get_size)
{
size_t size = get_demand_data_size();
BOOST_CHECK(size == 8);
}
struct Fixture {
Fixture() {
_data = NULL;
dlist = NULL;
dlist = create_list(get_demand_data_size(), delete_demand_data);
_data = create_demand_data(100.0, 1, "CUB_SCOUT_BASE_CAMP");
append_list(dlist, &_data);
}
~Fixture() {
delete_list(dlist);
}
demand_data_t *_data;
list_t *dlist;
};
BOOST_FIXTURE_TEST_CASE(test_demand_list, Fixture)
{
list_node_t *lnode = head_list(dlist, false);
BOOST_CHECK(lnode != NULL);
}
BOOST_FIXTURE_TEST_CASE(test_demand_getset, Fixture)
{
list_node_t *lnode = head_list(dlist, false);
double demand;
demand = get_base_demand(lnode);
BOOST_CHECK(demand == 100.0);
set_base_demand(lnode, 200.0);
demand = get_base_demand(lnode);
BOOST_CHECK(demand == 200.0);
}
BOOST_FIXTURE_TEST_CASE(test_pattern_getset, Fixture)
{
list_node_t *lnode = head_list(dlist, false);
int index;
index = get_pattern_index(lnode);
BOOST_CHECK(index == 1);
set_pattern_index(lnode, 2);
index = get_pattern_index(lnode);
BOOST_CHECK(index == 2);
}
BOOST_FIXTURE_TEST_CASE(test_category_getset, Fixture)
{
list_node_t *lnode = head_list(dlist, false);
char *name;
name = get_category_name(lnode);
BOOST_CHECK(check_string(name, "CUB_SCOUT_BASE_CAMP"));
free(name);
set_category_name(lnode, "CUB_SCOUT_COMMAND");
name = get_category_name(lnode);
BOOST_CHECK(check_string(name, "CUB_SCOUT_COMMAND"));
free(name);
}
BOOST_FIXTURE_TEST_CASE(test_convert_demand, Fixture)
{
list_node_t *lnode = head_list(dlist, false);
BOOST_CHECK(lnode != NULL);
// 100.0 GPM == 6.31 LPS
convert_units(lnode, 15.850);
double demand = get_base_demand(lnode);
BOOST_TEST(demand == 6.31, boost::test_tools::tolerance(0.01));
}
BOOST_AUTO_TEST_CASE(test_initclose)
{
int error;
EN_Project ph = NULL;
EN_createproject(&ph);
error = EN_init(ph, DATA_PATH_RPT, DATA_PATH_OUT, EN_GPM, EN_HW);
BOOST_REQUIRE(error == 0);
error = EN_close(ph);
BOOST_REQUIRE(error == 0);
EN_deleteproject(&ph);
}
#define DATA_PATH_NET1 "./net1.inp"
#define DATA_PATH_TMP "./tmp.inp"
#define DATA_PATH_RPT "./test.rpt"
#define DATA_PATH_OUT "./test.out"
struct FixtureSingleNode {
FixtureSingleNode() {
error = 0;
ph = NULL;
EN_createproject(&ph);
EN_init(ph, DATA_PATH_RPT, DATA_PATH_OUT, EN_GPM, EN_HW);
EN_addnode(ph, (char *)"N2", EN_JUNCTION);
EN_getnodeindex(ph, (char *)"N2", &node_idx);
}
~FixtureSingleNode() {
EN_close(ph);
EN_deleteproject(&ph);
}
int error, node_idx;
EN_Project ph;
};
BOOST_FIXTURE_TEST_CASE(test_single_node, FixtureSingleNode)
{
int demand_idx, pattern_idx, n;
double demand;
error = EN_getnumdemands(ph, node_idx, &n);
BOOST_REQUIRE(error == 0);
BOOST_CHECK(n == 0);
demand_idx = 1;
error = EN_getbasedemand(ph, node_idx, demand_idx, &demand);
BOOST_REQUIRE(error == 253);
error = EN_getdemandpattern(ph, node_idx, demand_idx, &pattern_idx);
BOOST_REQUIRE(error == 253);
char demname[31];
error = EN_getdemandname(ph, node_idx, demand_idx, demname);
BOOST_REQUIRE(error == 253);
BOOST_CHECK(check_string(demname, "\0"));
error = EN_setbasedemand(ph, node_idx, demand_idx, 100.0);
BOOST_REQUIRE(error == 0);
// only one demand category
pattern_idx = 1;
error = EN_setdemandpattern(ph, node_idx, demand_idx, pattern_idx);
BOOST_REQUIRE(error == 205);
// create pattern
error = EN_addpattern(ph, (char *)"Pat2");
BOOST_REQUIRE(error == 0);
error = EN_getpatternindex(ph, (char *)"Pat2", &pattern_idx);
BOOST_REQUIRE(error == 0);
error = EN_setdemandpattern(ph, node_idx, demand_idx, pattern_idx);
BOOST_REQUIRE(error == 0);
error = EN_setdemandname(ph, node_idx, demand_idx, (char *)"CUB_SCOUT_MESS_HALL");
BOOST_REQUIRE(error == 0);
}
BOOST_FIXTURE_TEST_CASE(test_pattern_edits, FixtureSingleNode)
{
int n, pat_idx;
// Add 2 new patterns
error = EN_addpattern(ph, (char *)"Pat2");
BOOST_REQUIRE(error == 0);
error = EN_addpattern(ph, (char *)"Pat3");
BOOST_REQUIRE(error == 0);
double f2[] = { 2.1, 2.2 };
double f3[] = { 3.1, 3.2, 3.3, 3.4 };
error = EN_setpattern(ph, 2, f2, 2);
BOOST_REQUIRE(error == 0);
error = EN_setpattern(ph, 3, f3, 4);
BOOST_REQUIRE(error == 0);
// Assign Pat3 to 3rd junction
error = EN_setdemandpattern(ph, 3, 1, 3);
BOOST_REQUIRE(error == 0);
// Delete Pat2
error = EN_deletepattern(ph, 2);
BOOST_REQUIRE(error == 0);
//Check that there are now 2 patterns
error = EN_getcount(ph, EN_PATCOUNT, &n);
BOOST_REQUIRE(error == 0);
BOOST_CHECK(n == 2);
// Check that Pat3 with 4 factors is still assigned to 3rd junction
error = EN_getdemandpattern(ph, 3, 1, &pat_idx);
BOOST_REQUIRE(error == 0);
error = EN_getpatternlen(ph, pat_idx, &n);
BOOST_REQUIRE(error == 0);
BOOST_CHECK(n == 4);
}
//BOOST_FIXTURE_TEST_CASE(test_demandpattern_getset, FixtureOpenClose)
//{
// int n, patIdx, pat2Idx, pat3Idx, defPatIdx = 1;
//
// // Rename the default pattern
// error = EN_setpatternid(ph, defPatIdx, (char *)"Pat1");
// BOOST_REQUIRE(error == 0);
// error = EN_getpatternindex(ph, (char *)"Pat1", &patIdx);
// BOOST_REQUIRE(error == 0);
// BOOST_CHECK(defPatIdx == patIdx);
//
// // Add 2 new patterns
// error = EN_addpattern(ph, (char *)"Pat2");
// BOOST_REQUIRE(error == 0);
// error = EN_getpatternindex(ph, (char *)"Pat2", &pat2Idx);
// BOOST_REQUIRE(error == 0);
//
// error = EN_addpattern(ph, (char *)"Pat3");
// BOOST_REQUIRE(error == 0);
// error = EN_getpatternindex(ph, (char *)"Pat3", &pat3Idx);
// BOOST_REQUIRE(error == 0);
//
// double f2[] = {2.1, 2.2};
// double f3[] = {3.1, 3.2, 3.3, 3.4};
// error = EN_setpattern(ph, pat2Idx, f2, 2);
// BOOST_REQUIRE(error == 0);
// error = EN_setpattern(ph, pat3Idx, f3, 4);
// BOOST_REQUIRE(error == 0);
//
// // Assign Pat3 to 3rd junction
// error = EN_setdemandpattern(ph, 3, 1, pat3Idx);
// BOOST_REQUIRE(error == 0);
//
// // Delete Pat2 and check for 2 patterns
// //error = EN_deletepattern(ph, pat2Idx);
// //BOOST_REQUIRE(error == 0);
// //error = EN_getcount(ph, EN_PATCOUNT, &n);
// //BOOST_REQUIRE(error == 0);
// //BOOST_CHECK(n == 2);
//
// // Check that Pat3 with 4 factors is still assigned to 3rd junction
// error = EN_getdemandpattern(ph, 3, 1, &patIdx);
// BOOST_REQUIRE(error == 0);
// error = EN_getpatternlen(ph, patIdx, &n);
// BOOST_REQUIRE(error == 0);
// BOOST_CHECK(n == 4);
//
// // Delete the default pattern
// //error = EN_deletepattern(ph, defPatIdx);
// //BOOST_REQUIRE(error == 0);
//
// // Check that junction 4 has no pattern
// error = EN_getdemandpattern(ph, 4, 1, &patIdx);
// BOOST_REQUIRE(error == 0);
// BOOST_CHECK(patIdx == 0);
//
// // And that junction 3 still uses Pat3
// error = EN_getdemandpattern(ph, 3, 1, &pat3Idx);
// BOOST_REQUIRE(error == 0);
// error = EN_getpatternindex(ph, (char *)"Pat3", &patIdx);
// BOOST_REQUIRE(error == 0);
// BOOST_CHECK(pat3Idx == patIdx);
//}
BOOST_AUTO_TEST_SUITE_END()