#include #include #include DOCTEST_TEST_CASE("Parse compound toggle arguments with implicit values [compound_arguments]") { argparse::ArgumentParser program("test"); program.add_argument("-a") .default_value(false) .implicit_value(true); program.add_argument("-u") .default_value(false) .implicit_value(true); program.add_argument("-x") .default_value(false) .implicit_value(true); program.parse_args({ "./test.exe", "-aux" }); REQUIRE(program.get("-a") == true); REQUIRE(program.get("-u") == true); REQUIRE(program.get("-x") == true); } DOCTEST_TEST_CASE("Parse compound toggle arguments with implicit values and nargs [compound_arguments]") { argparse::ArgumentParser program("test"); program.add_argument("-a") .default_value(false) .implicit_value(true); program.add_argument("-b") .default_value(false) .implicit_value(true); program.add_argument("-c") .nargs(2) .action([](const std::string& value) { return std::stof(value); }); program.add_argument("--input_files") .nargs(3); program.parse_args({ "./test.exe", "-abc", "3.14", "2.718", "--input_files", "a.txt", "b.txt", "c.txt" }); REQUIRE(program.get("-a") == true); REQUIRE(program.get("-b") == true); auto c = program.get>("-c"); REQUIRE(c.size() == 2); REQUIRE(c[0] == 3.14f); REQUIRE(c[1] == 2.718f); auto input_files = program.get>("--input_files"); REQUIRE(input_files.size() == 3); REQUIRE(input_files[0] == "a.txt"); REQUIRE(input_files[1] == "b.txt"); REQUIRE(input_files[2] == "c.txt"); } DOCTEST_TEST_CASE("Parse compound toggle arguments with implicit values and nargs and other positional arguments [compound_arguments]") { argparse::ArgumentParser program("test"); program.add_argument("numbers") .nargs(3) .action([](const std::string& value) { return std::stoi(value); }); program.add_argument("-a") .default_value(false) .implicit_value(true); program.add_argument("-b") .default_value(false) .implicit_value(true); program.add_argument("-c") .nargs(2) .action([](const std::string& value) { return std::stof(value); }); program.add_argument("--input_files") .nargs(3); REQUIRE_THROWS(program.parse_args({ "./test.exe", "1", "-abc", "3.14", "2.718", "2", "--input_files", "a.txt", "b.txt", "c.txt", "3" })); } DOCTEST_TEST_CASE("Parse out-of-order compound arguments [compound_arguments]") { argparse::ArgumentParser program("test"); program.add_argument("-a") .default_value(false) .implicit_value(true); program.add_argument("-b") .default_value(false) .implicit_value(true); program.add_argument("-c") .nargs(2) .action([](const std::string& value) { return std::stof(value); }); program.parse_args({ "./main", "-cab", "3.14", "2.718" }); auto a = program.get("-a"); // true auto b = program.get("-b"); // true auto c = program.get>("-c"); // {3.14f, 2.718f} REQUIRE(a == true); REQUIRE(b == true); REQUIRE(program["-c"] == std::vector{3.14f, 2.718f}); } DOCTEST_TEST_CASE("Parse out-of-order compound arguments. Second variation [compound_arguments]") { argparse::ArgumentParser program("test"); program.add_argument("-a") .default_value(false) .implicit_value(true); program.add_argument("-b") .default_value(false) .implicit_value(true); program.add_argument("-c") .nargs(2) .default_value(std::vector{0.0f, 0.0f}) .action([](const std::string& value) { return std::stof(value); }); program.parse_args({"./main", "-cb"}); auto a = program.get("-a"); auto b = program.get("-b"); auto c = program.get>("-c"); REQUIRE(a == false); REQUIRE(b == true); REQUIRE(program["-c"] == std::vector{0.0f, 0.0f}); }