Code improvements based on code review feedback

This commit is contained in:
Atle Haugan
2014-01-08 15:03:16 +01:00
parent 6709523843
commit c9cda9916f
3 changed files with 161 additions and 32 deletions
@@ -1,8 +1,20 @@
/*
* File: EclipseDataDoctor.cpp
* Author: kflik
*
* Created on August 20, 2013, 1:19 PM
/*
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 <http://www.gnu.org/licenses/>.
*/
#include <iostream>
@@ -1,8 +1,20 @@
/*
* File: KeywordDescriber.cpp
* Author: atleh
*
* Created on December 19, 2013, 1:19 PM
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 <http://www.gnu.org/licenses/>.
*/
#include <iostream>
@@ -10,36 +22,129 @@
#include <opm/parser/eclipse/Parser/Parser.hpp>
#include <opm/parser/eclipse/Parser/ParserRecord.hpp>
#include <opm/parser/eclipse/Parser/ParserItem.hpp>
#include <opm/parser/eclipse/Parser/ParserEnums.hpp>
#include <opm/parser/eclipse/Parser/ParserKeyword.hpp>
/*
*
*/
void printKeywordInformation(Opm::ParserKeywordConstPtr keyword)
void printKeywordInformation(Opm::ParserPtr parser, std::vector<std::string> keywords)
{
std::string indent = " ";
std::string indent = " ";
std::string keywordSeparator = "---------\n";
std::string itemSeparator = "\n";
std::vector<std::string>::const_iterator iterator;
for (iterator = keywords.begin(); iterator != keywords.end(); ++iterator) {
Opm::ParserKeywordConstPtr keyword = parser->getKeyword(*iterator);
std::cout << keyword->getName() << std::endl;
std::cout << indent << "Number of items: " << keyword->numItems() << std::endl;
std::cout << indent << "Has dimension information: " << keyword->hasDimension() << std::endl;
switch (keyword->getSizeType()) {
case Opm::ParserKeywordSizeEnum::SLASH_TERMINATED: {
std::cout << indent << "Size type: SLASH_TERMINATED" << std::endl;
break;
}
case Opm::ParserKeywordSizeEnum::FIXED: {
std::cout << indent << "Size type: FIXED" << std::endl;
if (keyword->hasFixedSize())
std::cout << indent << "Fixed size: " << keyword->getFixedSize() << std::endl;
break;
}
case Opm::ParserKeywordSizeEnum::OTHER_KEYWORD_IN_DECK: {
std::cout << indent << "Size type: OTHER" << std::endl;
std::pair<std::string, std::string> sizeDefinitionPair = keyword->getSizeDefinitionPair();
std::cout << indent << "Size defined by: " << sizeDefinitionPair.first << ", " << sizeDefinitionPair.second << std::endl;
break;
}
default:{
std::cout << indent << "Size type: UNKNOWN" << std::endl;
break;
}
}
std::cout << itemSeparator;
std::cout << indent << "List of items:" << std::endl;
Opm::ParserRecordPtr parserRecord = keyword->getRecord();
std::vector<Opm::ParserItemConstPtr>::const_iterator iterator;
for (iterator = parserRecord->begin(); iterator != parserRecord->end(); ++iterator) {
std::cout << indent << (*iterator)->name() << std::endl;
switch ((*iterator)->sizeType()) {
case Opm::ParserItemSizeEnum::ALL: {
std::cout << indent << indent << "SizeType: ALL" << std::endl;
break;
}
case Opm::ParserItemSizeEnum::SINGLE: {
std::cout << indent << indent << "SizeType: SINGLE" << std::endl;
break;
}
}
std::cout << indent << indent << "Has dimension information: " << (*iterator)->hasDimension() << std::endl;
if ((*iterator)->numDimensions() == 1)
std::cout << indent << indent << "Dimension: " << (*iterator)->getDimension((*iterator)->numDimensions()-1) << std::endl;
std::cout << itemSeparator;
}
std::cout << keywordSeparator;
}
}
void printKeywordInformationOBSOLETE(Opm::ParserKeywordConstPtr keyword)
{
std::string indent = " ";
std::string keywordSeparator = "---------\n";
std::string itemSeparator = "\n";
std::cout << keyword->getName() << std::endl;
std::cout << indent << "numItems: " << keyword->numItems() << std::endl;
std::cout << indent << "hasDimension: " << keyword->hasDimension() << std::endl;
std::cout << indent << "hasFixedSize: " << keyword->hasFixedSize() << std::endl;
if (keyword->hasFixedSize())
std::cout << indent << "getFixedSize: " << keyword->getFixedSize() << std::endl;
std::cout << indent << "getSizeType: " << keyword->getSizeType() << std::endl;
std::pair<std::string, std::string> sizeDefinitionPair = keyword->getSizeDefinitionPair();
std::cout << indent << "getSizeDefinitionPair: '" << sizeDefinitionPair.first << "', '" << sizeDefinitionPair.second << "'" << std::endl;
std::cout << indent << "Number of items: " << keyword->numItems() << std::endl;
std::cout << indent << "Has dimension information: " << keyword->hasDimension() << std::endl;
switch (keyword->getSizeType()) {
case Opm::ParserKeywordSizeEnum::SLASH_TERMINATED: {
std::cout << indent << "Size type: SLASH_TERMINATED" << std::endl;
break;
}
case Opm::ParserKeywordSizeEnum::FIXED: {
std::cout << indent << "Size type: FIXED" << std::endl;
if (keyword->hasFixedSize())
std::cout << indent << "Fixed size: " << keyword->getFixedSize() << std::endl;
break;
}
case Opm::ParserKeywordSizeEnum::OTHER_KEYWORD_IN_DECK: {
std::cout << indent << "Size type: OTHER" << std::endl;
std::pair<std::string, std::string> sizeDefinitionPair = keyword->getSizeDefinitionPair();
std::cout << indent << "Size defined by: " << sizeDefinitionPair.first << ", " << sizeDefinitionPair.second << std::endl;
break;
}
default:{
std::cout << indent << "Size type: UNKNOWN" << std::endl;
break;
}
}
std::cout << itemSeparator;
std::cout << indent << "List of items:" << std::endl;
Opm::ParserRecordPtr parserRecord = keyword->getRecord();
std::vector<Opm::ParserItemConstPtr>::const_iterator iterator;
for (iterator = parserRecord->begin(); iterator != parserRecord->end(); ++iterator) {
std::cout << indent << (*iterator)->name() << std::endl;
std::cout << indent << indent << "sizeType: " << (*iterator)->sizeType() << std::endl;
std::cout << indent << indent << "hasDimension: " << (*iterator)->hasDimension() << std::endl;
std::cout << indent << indent << "numDimensions: " << (*iterator)->numDimensions() << std::endl;
switch ((*iterator)->sizeType()) {
case Opm::ParserItemSizeEnum::ALL: {
std::cout << indent << indent << "SizeType: ALL" << std::endl;
break;
}
case Opm::ParserItemSizeEnum::SINGLE: {
std::cout << indent << indent << "SizeType: SINGLE" << std::endl;
break;
}
}
std::cout << indent << indent << "Has dimension information: " << (*iterator)->hasDimension() << std::endl;
if ((*iterator)->numDimensions() == 1)
std::cout << indent << indent << "getDimension(0): '" << (*iterator)->getDimension((*iterator)->numDimensions()-1) << "'" << std::endl;
std::cout << indent << indent << "Dimension: " << (*iterator)->getDimension((*iterator)->numDimensions()-1) << std::endl;
std::cout << itemSeparator;
}
std::cout << keywordSeparator;
}
bool parseCommandLineForAllKeywordsOption(char** argv)
@@ -77,11 +182,7 @@ int main(int argc, char** argv) {
std::vector<std::string> keywords = createListOfKeywordsToDescribe(argv, allKeywords, parser);
std::vector<std::string>::const_iterator iterator;
for (iterator = keywords.begin(); iterator != keywords.end(); ++iterator) {
Opm::ParserKeywordConstPtr keyword = parser->getKeyword(*iterator);
printKeywordInformation(keyword);
}
printKeywordInformation(parser, keywords);
return 0;
}
@@ -66,13 +66,29 @@ BOOST_AUTO_TEST_CASE(getKeyword_haskeyword_returnskeyword) {
BOOST_CHECK_EQUAL(parserKeyword, parser->getKeyword("FJAS"));
}
BOOST_AUTO_TEST_CASE(getKeyword_hasnotkeyword_throws) {
BOOST_AUTO_TEST_CASE(getKeyword_hasnotkeyword_getKeywordThrowsException) {
ParserPtr parser(new Parser());
ParserKeywordConstPtr parserKeyword(new ParserKeyword("FJAS"));
parser->addKeyword(parserKeyword);
BOOST_CHECK_THROW(parser->getKeyword("FJASS"), std::invalid_argument);
}
BOOST_AUTO_TEST_CASE(getAllKeywords_hasTwoKeywords_returnsCompleteList) {
ParserPtr parser(new Parser(false));
std::cout << parser->getAllKeywords().size() << std::endl;
ParserKeywordConstPtr firstParserKeyword(new ParserKeyword("FJAS"));
parser->addKeyword(firstParserKeyword);
ParserKeywordConstPtr secondParserKeyword(new ParserKeyword("SAJF"));
parser->addKeyword(secondParserKeyword);
BOOST_CHECK_EQUAL(2U, parser->getAllKeywords().size());
}
BOOST_AUTO_TEST_CASE(getAllKeywords_hasNoKeywords_returnsEmptyList) {
ParserPtr parser(new Parser(false));
BOOST_CHECK_EQUAL(0U, parser->getAllKeywords().size());
}
/************************ JSON config related tests **********************'*/