Add test for ReportConfig
This commit is contained in:
161
tests/parser/test_ReportConfig.cpp
Normal file
161
tests/parser/test_ReportConfig.cpp
Normal file
@@ -0,0 +1,161 @@
|
||||
/*
|
||||
Copyright 2020 Equinor ASA.
|
||||
|
||||
This file is part of the Open Porous Media project (OPM).
|
||||
|
||||
OPM is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OPM is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OPM. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <stdexcept>
|
||||
#include <iostream>
|
||||
|
||||
|
||||
#define BOOST_TEST_MODULE ReportConfigTest
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp>
|
||||
#include <opm/parser/eclipse/Deck/Deck.hpp>
|
||||
#include <opm/parser/eclipse/Parser/Parser.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
|
||||
#include <opm/parser/eclipse/Python/Python.hpp>
|
||||
|
||||
|
||||
|
||||
Opm::Schedule make_schedule(const std::string& sched_string) {
|
||||
std::string deck_string = R"(
|
||||
RUNSPEC
|
||||
DIMENS
|
||||
5 5 5 /
|
||||
OIL
|
||||
WATER
|
||||
TABDIMS
|
||||
/
|
||||
WELLDIMS
|
||||
2 10 3 2 /
|
||||
GRID
|
||||
DXV
|
||||
5*100 /
|
||||
DYV
|
||||
5*100 /
|
||||
DZV
|
||||
5*5 /
|
||||
TOPS
|
||||
25*2500 /
|
||||
PORO
|
||||
125*0.15 /
|
||||
PERMX
|
||||
125*500 /
|
||||
COPY
|
||||
'PERMX' 'PERMY' /
|
||||
'PERMX' 'PERMZ' /
|
||||
/
|
||||
MULTIPLY
|
||||
'PERMZ' 0.1 /
|
||||
/
|
||||
PROPS
|
||||
SWOF
|
||||
0 0 1 0
|
||||
1 1 0 0 /
|
||||
|
||||
SCHEDULE
|
||||
)";
|
||||
Opm::Parser parser;
|
||||
auto deck = parser.parseString(deck_string + sched_string);
|
||||
Opm::EclipseState ecl_state(deck);
|
||||
auto python = std::make_shared<Opm::Python>();
|
||||
return Opm::Schedule(deck, ecl_state, python);
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ReportConfig_INVALID) {
|
||||
const std::string sched_string1 = R"(
|
||||
RPTSCHED
|
||||
FIPSOL=X
|
||||
)";
|
||||
|
||||
const std::string sched_string2 = R"(
|
||||
RPTSCHED
|
||||
FIPSOL=-1
|
||||
)";
|
||||
|
||||
const std::string sched_string3 = R"(
|
||||
RPTSCHED
|
||||
FIPSOL=2.50
|
||||
)";
|
||||
|
||||
BOOST_CHECK_THROW(make_schedule(sched_string1), std::invalid_argument);
|
||||
BOOST_CHECK_THROW(make_schedule(sched_string2), std::invalid_argument);
|
||||
BOOST_CHECK_THROW(make_schedule(sched_string3), std::invalid_argument);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ReportConfig) {
|
||||
const std::string sched_string = R"(
|
||||
DATES
|
||||
1 'JAN' 2000 /
|
||||
/
|
||||
|
||||
RPTSCHED
|
||||
FIPSOL FIP=3 /
|
||||
|
||||
DATES
|
||||
1 'FEB' 2000 /
|
||||
/
|
||||
|
||||
RPTSCHED
|
||||
FIPSOL FIP=3 NOTHING /
|
||||
|
||||
)";
|
||||
auto sched = make_schedule(sched_string);
|
||||
|
||||
// Empty initial report configuration
|
||||
{
|
||||
auto report_config = sched.report_config(0);
|
||||
BOOST_CHECK_EQUAL(report_config.size(), 0);
|
||||
|
||||
BOOST_CHECK(!report_config.has("FIPFOAM"));
|
||||
BOOST_CHECK_THROW( report_config.get("FIPFOAM"), std::out_of_range);
|
||||
}
|
||||
|
||||
// Configuration at step 1
|
||||
{
|
||||
auto report_config = sched.report_config(1);
|
||||
BOOST_CHECK_EQUAL( report_config.size() , 2);
|
||||
|
||||
for (const auto& p : report_config) {
|
||||
if (p.first == "FIPSOL")
|
||||
BOOST_CHECK_EQUAL(p.second, 1);
|
||||
|
||||
if (p.first == "FIP")
|
||||
BOOST_CHECK_EQUAL(p.second, 3);
|
||||
}
|
||||
|
||||
BOOST_CHECK(!report_config.has("FIPFOAM"));
|
||||
BOOST_CHECK(report_config.has("FIP"));
|
||||
BOOST_CHECK_EQUAL(report_config.get("FIP"), 3);
|
||||
BOOST_CHECK_EQUAL(report_config.get("FIPSOL"), 1);
|
||||
}
|
||||
|
||||
// Configuration at step 2 - the special 'NOTHING' has cleared everything
|
||||
{
|
||||
auto report_config = sched.report_config(2);
|
||||
BOOST_CHECK_EQUAL(report_config.size(), 0);
|
||||
|
||||
BOOST_CHECK(!report_config.has("FIPFOAM"));
|
||||
BOOST_CHECK_THROW( report_config.get("FIPFOAM"), std::out_of_range);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user