// Copyright (c) 2017-2020, University of Cincinnati, developed by Henry Schreiner // under NSF AWARD 1414736 and by the respective contributors. // All rights reserved. // // SPDX-License-Identifier: BSD-3-Clause #include "app_helper.hpp" #include #include #include #include #include #include #include #include #include #include "gmock/gmock.h" namespace boost { namespace container { template class TApp_container_single_boost : public TApp { public: using container_type = T; container_type cval{}; TApp_container_single_boost() : TApp() {} }; using containerTypes_single_boost = ::testing::Types, small_vector, flat_set, stable_vector, slist>; TYPED_TEST_SUITE(TApp_container_single_boost, containerTypes_single_boost, ); TYPED_TEST(TApp_container_single_boost, containerInt_boost) { auto &cv = TApp_container_single_boost::cval; CLI::Option *opt = (TApp::app).add_option("-v", cv); TApp::args = {"-v", "1", "-1", "-v", "3", "-v", "-976"}; TApp::run(); EXPECT_EQ(4u, (TApp::app).count("-v")); EXPECT_EQ(4u, cv.size()); opt->check(CLI::PositiveNumber.application_index(0)); opt->check((!CLI::PositiveNumber).application_index(1)); EXPECT_NO_THROW(TApp::run()); EXPECT_EQ(4u, cv.size()); // v[3] would be negative opt->check(CLI::PositiveNumber.application_index(3)); EXPECT_THROW(TApp::run(), CLI::ValidationError); } template class TApp_container_pair_boost : public TApp { public: using container_type = T; container_type cval{}; TApp_container_pair_boost() : TApp() {} }; using isp = std::pair; using containerTypes_pair_boost = ::testing:: Types, small_vector, flat_set, slist, vector, flat_map>; TYPED_TEST_SUITE(TApp_container_pair_boost, containerTypes_pair_boost, ); TYPED_TEST(TApp_container_pair_boost, containerPair_boost) { auto &cv = TApp_container_pair_boost::cval; (TApp::app).add_option("--dict", cv); TApp::args = {"--dict", "1", "str1", "--dict", "3", "str3"}; TApp::run(); EXPECT_EQ(cv.size(), 2u); TApp::args = {"--dict", "1", "str1", "--dict", "3", "--dict", "-1", "str4"}; TApp::run(); EXPECT_EQ(cv.size(), 3u); } template class TApp_container_tuple_boost : public TApp { public: using container_type = T; container_type cval{}; TApp_container_tuple_boost() : TApp() {} }; using tup_obj = std::tuple; using containerTypes_tuple_boost = ::testing::Types, stable_vector, flat_set, slist>; TYPED_TEST_SUITE(TApp_container_tuple_boost, containerTypes_tuple_boost, ); TYPED_TEST(TApp_container_tuple_boost, containerTuple_boost) { auto &cv = TApp_container_tuple_boost::cval; (TApp::app).add_option("--dict", cv); TApp::args = {"--dict", "1", "str1", "4.3", "--dict", "3", "str3", "2.7"}; TApp::run(); EXPECT_EQ(cv.size(), 2u); TApp::args = {"--dict", "1", "str1", "4.3", "--dict", "3", "str3", "2.7", "--dict", "-1", "str4", "-1.87"}; TApp::run(); EXPECT_EQ(cv.size(), 3u); } using icontainer1 = vector; using icontainer2 = flat_set; using icontainer3 = slist; using containerTypes_container_boost = ::testing::Types, slist, flat_set, small_vector, std::vector, slist, flat_set, stable_vector, static_vector, slist, flat_set, static_vector>; template class TApp_container_container_boost : public TApp { public: using container_type = T; container_type cval{}; TApp_container_container_boost() : TApp() {} }; TYPED_TEST_SUITE(TApp_container_container_boost, containerTypes_container_boost, ); TYPED_TEST(TApp_container_container_boost, containerContainer_boost) { auto &cv = TApp_container_container_boost::cval; (TApp::app).add_option("--dict", cv); TApp::args = {"--dict", "1", "2", "4", "--dict", "3", "1"}; TApp::run(); EXPECT_EQ(cv.size(), 2u); TApp::args = {"--dict", "1", "2", "4", "--dict", "3", "1", "--dict", "3", "--dict", "3", "3", "3", "3", "3", "3", "3", "3", "3", "-3"}; TApp::run(); EXPECT_EQ(cv.size(), 4u); } } // namespace container } // namespace boost