2019-08-27 08:31:49 -05:00
|
|
|
#define BOOST_TEST_MODULE UDQ-ACTIONX_Data
|
|
|
|
|
|
|
|
#include <boost/test/unit_test.hpp>
|
|
|
|
|
|
|
|
#include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
|
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp>
|
2019-11-12 01:29:28 -06:00
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp>
|
2019-08-27 08:31:49 -05:00
|
|
|
#include <opm/parser/eclipse/Parser/Parser.hpp>
|
|
|
|
#include <opm/parser/eclipse/Deck/Deck.hpp>
|
|
|
|
|
2020-03-26 09:31:21 -05:00
|
|
|
#include <opm/parser/eclipse/Python/Python.hpp>
|
2020-06-16 07:09:49 -05:00
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/Action/State.hpp>
|
2019-08-27 08:31:49 -05:00
|
|
|
#include <opm/output/eclipse/AggregateUDQData.hpp>
|
|
|
|
#include <opm/output/eclipse/AggregateActionxData.hpp>
|
|
|
|
#include <opm/output/eclipse/WriteRestartHelpers.hpp>
|
|
|
|
|
|
|
|
#include <opm/output/eclipse/InteHEAD.hpp>
|
|
|
|
#include <opm/output/eclipse/VectorItems/intehead.hpp>
|
|
|
|
#include <opm/output/eclipse/DoubHEAD.hpp>
|
|
|
|
|
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQInput.hpp>
|
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQActive.hpp>
|
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQConfig.hpp>
|
2020-08-31 00:38:52 -05:00
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQState.hpp>
|
2019-08-27 08:31:49 -05:00
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.hpp>
|
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/Action/ActionX.hpp>
|
|
|
|
|
|
|
|
#include <opm/parser/eclipse/Units/UnitSystem.hpp>
|
|
|
|
#include <opm/parser/eclipse/Units/Units.hpp>
|
|
|
|
|
|
|
|
#include <opm/io/eclipse/OutputStream.hpp>
|
|
|
|
|
|
|
|
#include <stdexcept>
|
|
|
|
#include <utility>
|
|
|
|
#include <exception>
|
|
|
|
#include <iostream>
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
namespace {
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
Opm::Deck first_sim(std::string fname) {
|
2020-06-16 07:09:49 -05:00
|
|
|
return Opm::Parser{}.parseFile(fname);
|
|
|
|
}
|
2019-08-27 08:31:49 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
Opm::SummaryState sum_state_TEST1()
|
|
|
|
{
|
|
|
|
auto state = Opm::SummaryState{std::chrono::system_clock::now()};
|
|
|
|
state.update_well_var("OPU01", "WWPR", 21.);
|
|
|
|
state.update_well_var("OPU02", "WWPR", 22.);
|
|
|
|
state.update_well_var("OPL01", "WWPR", 23.);
|
|
|
|
state.update_well_var("OPL02", "WWPR", 24.);
|
|
|
|
|
|
|
|
state.update_well_var("OPU01", "WGPR", 230.);
|
|
|
|
state.update_well_var("OPU02", "WGPR", 231.);
|
|
|
|
state.update_well_var("OPL01", "WGPR", 232.);
|
|
|
|
state.update_well_var("OPL02", "WGPR", 233.);
|
|
|
|
|
|
|
|
state.update_group_var("UPPER", "GWPR", 36.);
|
|
|
|
state.update_group_var("LOWER", "GWPR", 37.);
|
|
|
|
state.update_group_var("TEST", "GWPR", 73.);
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
state.update_group_var("UPPER", "GGPR", 460.);
|
|
|
|
state.update_group_var("LOWER", "GGPR", 461.);
|
|
|
|
state.update_group_var("TEST", "GGPR", 821.);
|
|
|
|
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
state.update_group_var("TEST", "GMWPR", 4);
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
state.update("FWPR", 73.);
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
state.update("FMWPR", 4);
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
return state;
|
|
|
|
}
|
|
|
|
|
|
|
|
//int main(int argc, char* argv[])
|
|
|
|
struct SimulationCase
|
|
|
|
{
|
|
|
|
explicit SimulationCase(const Opm::Deck& deck)
|
|
|
|
: es { deck }
|
2020-03-31 03:26:55 -05:00
|
|
|
, grid { deck }
|
|
|
|
, python{ std::make_shared<Opm::Python>() }
|
2020-03-26 09:31:21 -05:00
|
|
|
, sched{ deck, es, python }
|
2019-08-27 08:31:49 -05:00
|
|
|
{}
|
|
|
|
|
|
|
|
// Order requirement: 'es' must be declared/initialised before 'sched'.
|
|
|
|
Opm::EclipseState es;
|
|
|
|
Opm::EclipseGrid grid;
|
2020-03-31 03:26:55 -05:00
|
|
|
std::shared_ptr<Opm::Python> python;
|
2019-08-27 08:31:49 -05:00
|
|
|
Opm::Schedule sched;
|
|
|
|
|
|
|
|
};
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_AUTO_TEST_SUITE(Aggregate_Actionx)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// test constructed UDQ-Actionx restart data
|
|
|
|
BOOST_AUTO_TEST_CASE (Declared_Actionx_data)
|
|
|
|
{
|
|
|
|
const auto simCase = SimulationCase{first_sim("UDQ_ACTIONX_TEST1.DATA")};
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
Opm::EclipseState es = simCase.es;
|
|
|
|
Opm::Runspec rspec = es.runspec();
|
|
|
|
Opm::SummaryState st = sum_state_TEST1();
|
2020-08-31 00:38:52 -05:00
|
|
|
Opm::UDQState udq_state(1);
|
2020-06-16 07:09:49 -05:00
|
|
|
Opm::Action::State action_state;
|
2019-08-27 08:31:49 -05:00
|
|
|
Opm::Schedule sched = simCase.sched;
|
|
|
|
Opm::EclipseGrid grid = simCase.grid;
|
|
|
|
const auto& ioConfig = es.getIOConfig();
|
|
|
|
//const auto& restart = es.cfg().restart();
|
|
|
|
|
|
|
|
|
|
|
|
// Report Step 1: 2008-10-10 --> 2011-01-20
|
2020-06-16 07:09:49 -05:00
|
|
|
const auto rptStep = std::size_t{1};
|
2019-08-27 08:31:49 -05:00
|
|
|
std::string outputDir = "./";
|
|
|
|
std::string baseName = "UDQ_ACTIONX_TEST1";
|
|
|
|
Opm::EclIO::OutputStream::Restart rstFile {
|
|
|
|
Opm::EclIO::OutputStream::ResultSet { outputDir, baseName },
|
|
|
|
rptStep,
|
|
|
|
Opm::EclIO::OutputStream::Formatted { ioConfig.getFMTOUT() },
|
|
|
|
Opm::EclIO::OutputStream::Unified { ioConfig.getUNIFOUT() }
|
|
|
|
};
|
|
|
|
|
|
|
|
double secs_elapsed = 3.1536E07;
|
2019-12-18 10:23:40 -06:00
|
|
|
const auto ih = Opm::RestartIO::Helpers::
|
|
|
|
createInteHead(es, grid, sched, secs_elapsed,
|
|
|
|
rptStep, rptStep, rptStep);
|
|
|
|
|
2020-06-16 07:09:49 -05:00
|
|
|
//set dummy value for next_step_size
|
2019-08-27 08:31:49 -05:00
|
|
|
const double next_step_size= 0.1;
|
2020-06-16 07:09:49 -05:00
|
|
|
const auto dh = Opm::RestartIO::Helpers::createDoubHead(es, sched, rptStep,
|
|
|
|
secs_elapsed, next_step_size);
|
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
const auto udqDims = Opm::RestartIO::Helpers::createUdqDims(sched, rptStep, ih);
|
|
|
|
auto udqData = Opm::RestartIO::Helpers::AggregateUDQData(udqDims);
|
2020-08-31 00:38:52 -05:00
|
|
|
udqData.captureDeclaredUDQData(sched, rptStep, udq_state, ih);
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
const auto actDims = Opm::RestartIO::Helpers::createActionxDims(rspec, sched, rptStep);
|
|
|
|
auto actionxData = Opm::RestartIO::Helpers::AggregateActionxData(actDims);
|
2020-06-16 07:09:49 -05:00
|
|
|
actionxData.captureDeclaredActionxData(sched, action_state, st, actDims, rptStep);
|
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
{
|
|
|
|
/*
|
|
|
|
Check of InteHEAD and DoubHEAD data for UDQ variables
|
2020-06-16 07:09:49 -05:00
|
|
|
|
|
|
|
INTEHEAD
|
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
Intehead[156] - The number of ACTIONS
|
|
|
|
Intehead[157] - The max number of lines of schedule data including ENDACTIO keyword for any ACTION
|
|
|
|
|
|
|
|
---------------------------------------------------------------------------------------------------------------------]
|
|
|
|
|
|
|
|
*/
|
|
|
|
const auto rptStep_1 = std::size_t{0};
|
|
|
|
const auto ih_1 = Opm::RestartIO::Helpers::createInteHead(es, grid, sched,
|
2019-12-18 10:23:40 -06:00
|
|
|
secs_elapsed, rptStep, rptStep_1 + 1, rptStep_1);
|
2020-06-16 07:09:49 -05:00
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(ih_1[156] , 2);
|
|
|
|
BOOST_CHECK_EQUAL(ih_1[157] , 7);
|
|
|
|
|
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
const auto rptStep_2 = std::size_t{1};
|
|
|
|
const auto ih_2 = Opm::RestartIO::Helpers::createInteHead(es, grid, sched,
|
2019-12-18 10:23:40 -06:00
|
|
|
secs_elapsed, rptStep, rptStep_2 + 1, rptStep_2);
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(ih_2[156] , 3);
|
|
|
|
BOOST_CHECK_EQUAL(ih_2[157] , 10);
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
const auto rptStep_3 = std::size_t{2};
|
|
|
|
const auto ih_3 = Opm::RestartIO::Helpers::createInteHead(es, grid, sched,
|
2019-12-18 10:23:40 -06:00
|
|
|
secs_elapsed, rptStep, rptStep_3 + 1, rptStep_3);
|
2020-06-16 07:09:49 -05:00
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(ih_3[156] , 3);
|
|
|
|
BOOST_CHECK_EQUAL(ih_3[157] , 10);
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
IACT
|
|
|
|
--length is equal to 9*the number of ACTIONX keywords
|
|
|
|
//item [0]: is unknown, (=0)
|
|
|
|
//item [1]: The number of lines of schedule data including ENDACTIO
|
|
|
|
//item [2]: is unknown, (=1)
|
|
|
|
//item [3]: is unknown, (=7)
|
|
|
|
//item [4]: is unknown, (=0)
|
|
|
|
//item [5]: The number of times the action is triggered
|
|
|
|
//item [6]: is unknown, (=0)
|
|
|
|
//item [7]: is unknown, (=0)
|
|
|
|
//item [8]: The number of times the action is triggered
|
|
|
|
*/
|
2020-06-16 07:09:49 -05:00
|
|
|
|
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
const auto& iAct = actionxData.getIACT();
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
auto start = 0*actDims[1];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 0] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 1] , 10);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 2] , 1);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 3] , 7);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 4] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 5] , 10);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 6] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 7] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 8] , 3);
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
start = 1*actDims[1];
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 0] , 0);
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 1] , 7);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 2] , 1);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 3] , 7);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 4] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 5] , 11);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 6] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 7] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 8] , 3);
|
|
|
|
|
|
|
|
start = 2*actDims[1];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 0] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 1] , 4);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 2] , 1);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 3] , 7);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 4] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 5] , 13);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 6] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 7] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAct[start + 8] , 3);
|
|
|
|
|
|
|
|
}
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
{
|
|
|
|
/*
|
|
|
|
ZACT
|
|
|
|
--length 4 times 8-chars pr ACTIONX keyword
|
|
|
|
|
|
|
|
Name of action 4 times 8 chars (up to 8 chars for name)
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
*/
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
const auto& zAct = actionxData.getZACT();
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
auto start = 0*actDims[3];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAct[start + 0].c_str() , "ACT01 ");
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
start = 1*actDims[3];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAct[start + 0].c_str() , "ACT02 ");
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
start = 2*actDims[3];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAct[start + 0].c_str() , "ACT03 ");
|
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
}
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
{
|
|
|
|
/*
|
|
|
|
ZLACT
|
|
|
|
-- length = ACTDIMS_item3*(max-over-action of number of lines of data pr ACTION)
|
|
|
|
|
|
|
|
*/
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
const auto& zLact = actionxData.getZLACT();
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
//First action
|
|
|
|
auto start_a = 0*actDims[4];
|
|
|
|
auto start = start_a + 0*actDims[8];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "WELOPEN ");
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
start = start_a + 1*actDims[8];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , " '?' '");
|
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 1].c_str() , "SHUT' 0 ");
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 2].c_str() , "0 0 / ");
|
|
|
|
|
|
|
|
start = start_a + 2*actDims[8];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "/ ");
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
start = start_a + 3*actDims[8];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "WELOPEN ");
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
//Second action
|
|
|
|
start_a = 1*actDims[4];
|
|
|
|
start = start_a + 0*actDims[8];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "WELOPEN ");
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
start = start_a + 1*actDims[8];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , " '?' '");
|
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 1].c_str() , "SHUT' 0 ");
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 2].c_str() , "0 0 / ");
|
|
|
|
|
|
|
|
start = start_a + 2*actDims[8];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "/ ");
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
start = start_a + 3*actDims[8];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "WELOPEN ");
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
start = start_a + 4*actDims[8];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , " 'OPL0");
|
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 1].c_str() , "1' 'OPEN");
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 2].c_str() , "' / ");
|
|
|
|
|
|
|
|
start = start_a + 5*actDims[8];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "/ ");
|
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
start = start_a + 6*actDims[8];
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "ENDACTIO");
|
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
}
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
{
|
|
|
|
/*
|
|
|
|
ZACN
|
|
|
|
//(Max number of conditions pr ACTIONX) * ((max no characters pr line = 104) / (8 - characters pr string)(104/8 = 13)
|
|
|
|
|
|
|
|
*/
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
const auto& zAcn = actionxData.getZACN();
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
//First action
|
|
|
|
auto start_a = 0*actDims[5];
|
|
|
|
auto start = start_a + 0*13;
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , "FMWPR ");
|
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " ");
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> ");
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , " ");
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
start = start_a + 1*13;
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , "WUPR3 ");
|
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " ");
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> ");
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , "OP* ");
|
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 4].c_str() , " ");
|
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 5].c_str() , " ");
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
start = start_a + 2*13;
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , " ");
|
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " ");
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> ");
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , " ");
|
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 4].c_str() , " ");
|
|
|
|
|
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
//Second action
|
|
|
|
start_a = 1*actDims[5];
|
|
|
|
start = start_a + 0*13;
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , "FMWPR ");
|
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " ");
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> ");
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , " ");
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
start = start_a + 1*13;
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , "WGPR ");
|
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , "GGPR ");
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> ");
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , "OPL02 ");
|
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 4].c_str() , " ");
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 5].c_str() , " ");
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 6].c_str() , "LOWER ");
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
start = start_a + 2*13;
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , " ");
|
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " ");
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> ");
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , " ");
|
|
|
|
BOOST_CHECK_EQUAL(zAcn[start + 4].c_str() , " ");
|
2019-08-27 08:31:49 -05:00
|
|
|
}
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
{
|
|
|
|
/*
|
|
|
|
IACN
|
2020-06-16 07:09:49 -05:00
|
|
|
26*Max number of conditions pr ACTIONX
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
*/
|
2020-06-16 07:09:49 -05:00
|
|
|
|
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
const auto& iAcn = actionxData.getIACN();
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
auto start_a = 0*actDims[6];
|
|
|
|
auto start = start_a + 0*26;
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 0] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 1] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 2] , 0);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 3] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 4] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 5] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 6] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 7] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 8] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 9] , 0);
|
2019-12-17 09:34:45 -06:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 10] , 1);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 11] , 8);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 12] , 0);
|
2019-12-17 09:34:45 -06:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 13] , 1);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 14] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 15] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 16] , 1);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 17] , 0);
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
start = start_a + 1*26;
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 0] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 1] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 2] , 0);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 3] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 4] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 5] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 6] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 7] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 8] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 9] , 0);
|
2019-12-17 09:34:45 -06:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 10] , 2);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 11] , 8);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 12] , 0);
|
2019-12-17 09:34:45 -06:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 13] , 2);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 14] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 15] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 16] , 1);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 17] , 0);
|
|
|
|
|
|
|
|
start_a = 1*actDims[6];
|
|
|
|
start = start_a + 0*26;
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 0] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 1] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 2] , 0);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 3] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 4] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 5] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 6] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 7] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 8] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 9] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 10] , 1);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 11] , 8);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 12] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 13] , 1);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 14] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 15] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 16] , 1);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 17] , 0);
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
start = start_a + 1*26;
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 0] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 1] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 2] , 0);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 3] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 4] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 5] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 6] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 7] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 8] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 9] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 10] , 2);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 11] , 3);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 12] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 13] , 1);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 14] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 15] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 16] , 1);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 17] , 0);
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
start = start_a + 2*26;
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 0] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 1] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 2] , 0);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 3] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 4] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 5] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 6] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 7] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 8] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 9] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 10] , 11);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 11] , 8);
|
2019-12-17 09:34:45 -06:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 12] , 0);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 13] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 14] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 15] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 16] , 1);
|
|
|
|
BOOST_CHECK_EQUAL(iAcn[start + 17] , 1);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2020-06-16 07:09:49 -05:00
|
|
|
|
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
{
|
|
|
|
/*
|
|
|
|
SACN
|
2020-06-16 07:09:49 -05:00
|
|
|
26*Max number of conditions pr ACTIONX
|
2019-08-27 08:31:49 -05:00
|
|
|
|
|
|
|
*/
|
2020-06-16 07:09:49 -05:00
|
|
|
|
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
const auto& sAcn = actionxData.getSACN();
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
auto start_a = 0*actDims[6];
|
|
|
|
auto start = start_a + 0*16;
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 0] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 1] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 2] , 45);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 3] , 0);
|
2019-12-17 09:34:45 -06:00
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 4] , 4);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 5] , 45);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 6] , 4);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 7] , 45);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 8] , 4);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 9] , 45);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 10] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 11] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 12] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 13] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 14] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 15] , 0);
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
start = start_a + 1*16;
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 0] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 1] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 2] , 46);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 3] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 4] , 0);
|
2019-12-17 09:34:45 -06:00
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 5] , 46);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 6] , 0);
|
2019-12-17 09:34:45 -06:00
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 7] , 46);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 8] , 0);
|
2019-12-17 09:34:45 -06:00
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 9] , 46);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 10] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 11] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 12] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 13] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 14] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 15] , 0);
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
start = start_a + 2*16;
|
2020-06-16 07:09:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 0] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 1] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 2] , 10);
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 3] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 4] , 1.E+20);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 5] , 1.E+20);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 6] , 1.E+20);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 7] , 1.E+20);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 8] , 1.E+20);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 9] , 1.E+20);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 10] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 11] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 12] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 13] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 14] , 0);
|
|
|
|
BOOST_CHECK_EQUAL(sAcn[start + 15] , 0);
|
|
|
|
|
|
|
|
}
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
}
|
2020-06-16 07:09:49 -05:00
|
|
|
|
2019-08-27 08:31:49 -05:00
|
|
|
BOOST_AUTO_TEST_SUITE_END()
|