1
0
mirror of https://github.com/CLIUtils/CLI11.git synced 2025-04-29 12:13:52 +00:00

Correcting the logic for sized types in vectors

This commit is contained in:
Henry Fredrick Schreiner 2018-06-26 17:44:44 +02:00 committed by Henry Schreiner
parent 5fe44fc713
commit 3cb75b903e
2 changed files with 13 additions and 7 deletions

View File

@ -560,12 +560,18 @@ class Option : public OptionBase<Option> {
local_result = !callback_(partial_result);
} else {
// For now, vector of non size 1 types are not supported but possibility included here
if((get_items_expected() > 0 && results_.size() != static_cast<size_t>(get_items_expected())) ||
(get_items_expected() < 0 && results_.size() < static_cast<size_t>(-get_items_expected())))
throw ArgumentMismatch(get_name(), get_items_expected(), results_.size());
else
local_result = !callback_(results_);
// Exact number required
if(get_items_expected() > 0) {
if(results_.size() != static_cast<size_t>(get_items_expected()))
throw ArgumentMismatch(get_name(), get_items_expected(), results_.size());
// Variable length list
} else if(get_items_expected() < 0) {
// Require that this be a multiple of expected size and at least as many as expected
if(results_.size() < static_cast<size_t>(-get_items_expected()) ||
results_.size() % static_cast<size_t>(std::abs(get_type_size())) != 0)
throw ArgumentMismatch(get_name(), get_items_expected(), results_.size());
}
local_result = !callback_(results_);
}
if(local_result)

View File

@ -1593,5 +1593,5 @@ TEST_F(TApp, RepeatingMultiArgumentOptions) {
app.reset();
args.pop_back();
ASSERT_THROW(run(), CLI::ValidationError);
ASSERT_THROW(run(), CLI::ArgumentMismatch);
}