From 114c5da03b70e12cb211d5fdf25436c7c3111303 Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Wed, 30 Aug 2017 16:25:30 +0200 Subject: [PATCH] Added dump -> re_parse test loop for test decks. --- src/opm/parser/eclipse/CMakeLists.txt | 5 +- tests/parser/integration/parse_write.cpp | 64 ++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 tests/parser/integration/parse_write.cpp diff --git a/src/opm/parser/eclipse/CMakeLists.txt b/src/opm/parser/eclipse/CMakeLists.txt index 730ae7da4..ad8ba6f83 100644 --- a/src/opm/parser/eclipse/CMakeLists.txt +++ b/src/opm/parser/eclipse/CMakeLists.txt @@ -283,6 +283,9 @@ foreach (test BoxTest add_test(NAME ${test} COMMAND ${test} ${_testdir}/integration_tests/) endforeach () +add_executable(parse_write tests/integration/parse_write.cpp) +target_link_libraries(parse_write opmparser boost_test) + if (NOT HAVE_OPM_DATA) return () endif () @@ -305,7 +308,7 @@ foreach (deck ${OPM_DATA_ROOT}/norne/NORNE_ATW2013.DATA ${OPM_DATA_ROOT}/spe10model2/SPE10_MODEL2.DATA ${OPM_DATA_ROOT}/msw_2d_h/2D_H__.DATA ) get_filename_component(test_name ${deck} NAME_WE) - add_test(NAME ${test_name} COMMAND opmi ${deck}) + add_test(NAME ${test_name} COMMAND parse_write ${deck}) endforeach() set_property(TEST NORNE_ATW2013 PROPERTY ENVIRONMENT "OPM_ERRORS_IGNORE=PARSE_RANDOM_SLASH") diff --git a/tests/parser/integration/parse_write.cpp b/tests/parser/integration/parse_write.cpp new file mode 100644 index 000000000..449bd15f1 --- /dev/null +++ b/tests/parser/integration/parse_write.cpp @@ -0,0 +1,64 @@ +/* + Copyright 2013 Statoil 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 . +*/ + +#include + +#include +#include +#include +#include +#include + +inline void loadDeck( const char * deck_file) { + Opm::ParseContext parseContext; + Opm::Parser parser; + + auto deck = parser.parseFile(deck_file, parseContext); + Opm::EclipseState state( deck, parseContext ); + { + std::stringstream ss; + + ss << deck; + auto deck2 = parser.parseString(ss.str(), parseContext); + if (deck.size() != deck2.size()) { + std::cerr << "Deck size mismatch original:" << deck.size() << " new: " << deck2.size( ) << std::endl; + std::exit( 1 ); + } + + for (size_t index=0; index < deck.size(); index++) { + const auto& kw1 = deck.getKeyword( index ); + const auto& kw2 = deck2.getKeyword( index ); + + if (!kw1.equal( kw2 , true , true)) { + std::cerr << "Keyword " << index << " different " << kw1.name() << " " << kw2.name() << std::endl; + std::cerr << kw1 << std::endl; + std::cerr << std::endl << "-----------------------------------------------------------------" << std::endl; + std::cerr << kw2 << std::endl; + std::exit( 1 ); + } + } + } +} + + +int main(int argc, char** argv) { + for (int iarg = 1; iarg < argc; iarg++) + loadDeck( argv[iarg] ); +} +