#include #include using doctest::test_suite; TEST_CASE("Parse negative integer" * test_suite("positional_arguments")) { argparse::ArgumentParser program; program.add_argument("--verbose", "-v") .help("enable verbose logging") .default_value(false) .implicit_value(true); program.add_argument("number") .help("Input number") .action([](const std::string& value) { return std::stoi(value); }); program.parse_args({"./main", "-1"}); REQUIRE(program.get("number") == -1); } TEST_CASE("Parse negative integers into a vector" * test_suite("positional_arguments")) { argparse::ArgumentParser program; program.add_argument("--verbose", "-v") .help("enable verbose logging") .default_value(false) .implicit_value(true); program.add_argument("number") .help("Input number") .nargs(3) .action([](const std::string& value) { return std::stoi(value); }); program.parse_args({"./main", "-1", "-2", "3"}); REQUIRE(program["number"] == std::vector{-1, -2, 3}); } TEST_CASE("Parse negative float" * test_suite("positional_arguments")) { argparse::ArgumentParser program; program.add_argument("--verbose", "-v") .help("enable verbose logging") .default_value(false) .implicit_value(true); program.add_argument("number") .help("Input number") .action([](const std::string& value) { return std::stof(value); }); program.parse_args({"./main", "-1.0"}); REQUIRE(program.get("number") == -1.0); } TEST_CASE("Parse negative floats into a vector" * test_suite("positional_arguments")) { argparse::ArgumentParser program; program.add_argument("--verbose", "-v") .help("enable verbose logging") .default_value(false) .implicit_value(true); program.add_argument("number") .help("Input number") .nargs(3) .action([](const std::string& value) { return std::stod(value); }); program.parse_args({"./main", "-1.001", "-2.002", "3.003"}); REQUIRE(program["number"] == std::vector{-1.001, -2.002, 3.003}); } TEST_CASE("Parse numbers in E notation" * test_suite("positional_arguments")) { argparse::ArgumentParser program; program.add_argument("--verbose", "-v") .help("enable verbose logging") .default_value(false) .implicit_value(true); program.add_argument("number") .help("Input number") .action([](const std::string& value) { return std::stod(value); }); program.parse_args({"./main", "-1.2e3"}); REQUIRE(program.get("number") == -1200.0); } TEST_CASE("Parse numbers in E notation (capital E)" * test_suite("positional_arguments")) { argparse::ArgumentParser program; program.add_argument("--verbose", "-v") .help("enable verbose logging") .default_value(false) .implicit_value(true); program.add_argument("number") .help("Input number") .action([](const std::string& value) { return std::stod(value); }); program.parse_args({"./main", "-1.32E4"}); REQUIRE(program.get("number") == -13200.0); }