mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Merge pull request #3387 from verveerpj/fix_keyword_validation
Small fix for the keyword validation
This commit is contained in:
commit
7d2984e3a3
@ -129,14 +129,16 @@ namespace KeywordValidation
|
|||||||
// Find the index number, which starts counting at one, so item_index + 1
|
// Find the index number, which starts counting at one, so item_index + 1
|
||||||
const auto& item_properties = keyword_properties->second.find(item_index + 1);
|
const auto& item_properties = keyword_properties->second.find(item_index + 1);
|
||||||
if (item_properties != keyword_properties->second.end()) {
|
if (item_properties != keyword_properties->second.end()) {
|
||||||
// Validate the item, if it is partially supported.
|
if (item.hasValue(0)) {
|
||||||
validateKeywordItem<T>(keyword,
|
// Validate the item, if it is partially supported.
|
||||||
item_properties->second,
|
validateKeywordItem<T>(keyword,
|
||||||
keyword.size() > 1,
|
item_properties->second,
|
||||||
record_index,
|
keyword.size() > 1,
|
||||||
item_index,
|
record_index,
|
||||||
item.get<T>(0),
|
item_index,
|
||||||
errors);
|
item.get<T>(0),
|
||||||
|
errors);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,8 +40,15 @@ const PartiallySupportedKeywords<std::string> test_string_items = {
|
|||||||
{
|
{
|
||||||
"PINCH",
|
"PINCH",
|
||||||
{
|
{
|
||||||
{2, {false, allow_values<std::string>{"GAP", "BAR"}, std::nullopt}}, // GAP
|
{2, {false, allow_values<std::string> {"GAP", "BAR"}, std::nullopt}}, // GAP
|
||||||
{4, {true, allow_values<std::string>{"TOPBOT"}, "This is a critical error"}}, // PINCHOUT_OPTION
|
{4, {true, allow_values<std::string> {"TOPBOT"}, "This is a critical error"}}, // PINCHOUT_OPTION
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EQLOPTS",
|
||||||
|
{
|
||||||
|
{1, {false, allow_values<std::string> {}, std::nullopt}},
|
||||||
|
{3, {false, allow_values<std::string> {"THPRESS"}, std::nullopt}},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -51,15 +58,15 @@ const PartiallySupportedKeywords<int> test_int_items = {
|
|||||||
{
|
{
|
||||||
"ENDSCALE",
|
"ENDSCALE",
|
||||||
{
|
{
|
||||||
{3, {false, allow_values<int>{1}, std::nullopt}}, // NTENDP
|
{3, {false, allow_values<int> {1}, std::nullopt}}, // NTENDP
|
||||||
{4, {true, allow_values<int>{20, 30, 40}, std::nullopt}}, // NSENDP
|
{4, {true, allow_values<int> {20, 30, 40}, std::nullopt}}, // NSENDP
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"COMPDAT",
|
"COMPDAT",
|
||||||
{
|
{
|
||||||
{2, {false, allow_values<int>{1}, std::nullopt}}, // I
|
{2, {false, allow_values<int> {1}, std::nullopt}}, // I
|
||||||
{3, {false, allow_values<int>{1}, std::nullopt}}, // J
|
{3, {false, allow_values<int> {1}, std::nullopt}}, // J
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -70,12 +77,13 @@ const PartiallySupportedKeywords<double> test_double_items = {
|
|||||||
"EHYSTR",
|
"EHYSTR",
|
||||||
{
|
{
|
||||||
{1, {false, [](double x) { return x > 0; }, std::nullopt}},
|
{1, {false, [](double x) { return x > 0; }, std::nullopt}},
|
||||||
{3, {false, allow_values<double>{1.0, 2.0}, std::nullopt}},
|
{3, {false, allow_values<double> {1.0, 2.0}, std::nullopt}},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(non_critical_keyword)
|
BOOST_AUTO_TEST_CASE(non_critical_keyword)
|
||||||
{
|
{
|
||||||
const auto keywords_string = std::string {R"(
|
const auto keywords_string = std::string {R"(
|
||||||
@ -513,3 +521,53 @@ ENDSCALE
|
|||||||
" In file: <memory string>, line 4\n"
|
" In file: <memory string>, line 4\n"
|
||||||
" This is a critical error");
|
" This is a critical error");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(keyword_without_default)
|
||||||
|
{
|
||||||
|
const auto keywords_string = std::string {R"(
|
||||||
|
EQLOPTS
|
||||||
|
1* /
|
||||||
|
)"};
|
||||||
|
const auto deck = Parser {}.parseString(keywords_string);
|
||||||
|
const auto& test_keyword = deck.getKeyword("EQLOPTS");
|
||||||
|
KeywordValidator validator(test_unsupported_keywords, test_string_items, test_int_items, test_double_items);
|
||||||
|
std::vector<ValidationError> errors;
|
||||||
|
validator.validateDeckKeyword(test_keyword, errors);
|
||||||
|
BOOST_CHECK(errors.size() == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(keyword_without_default_with_wrong_value)
|
||||||
|
{
|
||||||
|
const auto keywords_string = std::string {R"(
|
||||||
|
EQLOPTS
|
||||||
|
FOO /
|
||||||
|
)"};
|
||||||
|
const auto deck = Parser {}.parseString(keywords_string);
|
||||||
|
const auto& test_keyword = deck.getKeyword("EQLOPTS");
|
||||||
|
KeywordValidator validator(test_unsupported_keywords, test_string_items, test_int_items, test_double_items);
|
||||||
|
std::vector<ValidationError> errors;
|
||||||
|
validator.validateDeckKeyword(test_keyword, errors);
|
||||||
|
BOOST_CHECK(errors.size() == 1);
|
||||||
|
BOOST_CHECK(errors[0].item_number == 1);
|
||||||
|
BOOST_CHECK(errors[0].item_value == "FOO");
|
||||||
|
BOOST_CHECK(!errors[0].user_message);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(keyword_without_default_with_correct_value)
|
||||||
|
{
|
||||||
|
const auto keywords_string = std::string {R"(
|
||||||
|
EQLOPTS
|
||||||
|
1* 1* THPRESS /
|
||||||
|
)"};
|
||||||
|
const auto deck = Parser {}.parseString(keywords_string);
|
||||||
|
const auto& test_keyword = deck.getKeyword("EQLOPTS");
|
||||||
|
KeywordValidator validator(test_unsupported_keywords, test_string_items, test_int_items, test_double_items);
|
||||||
|
std::vector<ValidationError> errors;
|
||||||
|
validator.validateDeckKeyword(test_keyword, errors);
|
||||||
|
BOOST_CHECK(errors.size() == 0);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user