From 1f2187b0e1e2b3c38f6862374aa597a551f399c0 Mon Sep 17 00:00:00 2001 From: Nicholas Devenish Date: Sun, 26 Jan 2025 21:08:49 +0000 Subject: [PATCH] store_into: Accept float (by accepting generic floating point) --- include/argparse/argparse.hpp | 7 ++++--- test/test_store_into.cpp | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/include/argparse/argparse.hpp b/include/argparse/argparse.hpp index e73da42..06d30fd 100644 --- a/include/argparse/argparse.hpp +++ b/include/argparse/argparse.hpp @@ -717,12 +717,13 @@ public: return *this; } - auto &store_into(double &var) { + template ::value>::type * = nullptr> + auto &store_into(T &var) { if (m_default_value.has_value()) { - var = std::any_cast(m_default_value); + var = std::any_cast(m_default_value); } action([&var](const auto &s) { - var = details::parse_number()(s); + var = details::parse_number()(s); return var; }); return *this; diff --git a/test/test_store_into.cpp b/test/test_store_into.cpp index 5fe575f..0d42063 100644 --- a/test/test_store_into.cpp +++ b/test/test_store_into.cpp @@ -124,6 +124,38 @@ TEST_CASE("Test store_into(double), default value, specified" * REQUIRE(res == 5.5); } +// Float cases + +TEST_CASE("Test store_into(float), no default value, non specified" * + test_suite("store_into")) { + argparse::ArgumentParser program("test"); + float res = -1.0f; + program.add_argument("--float-opt").store_into(res); + + program.parse_args({"./test.exe"}); + REQUIRE(res == -1.0f); +} + +TEST_CASE("Test store_into(float), default value, non specified" * + test_suite("store_into")) { + argparse::ArgumentParser program("test"); + float res = -1.0f; + program.add_argument("--float-opt").default_value(3.5f).store_into(res); + + program.parse_args({"./test.exe"}); + REQUIRE(res == 3.5f); +} + +TEST_CASE("Test store_into(float), default value, specified" * + test_suite("store_into")) { + argparse::ArgumentParser program("test"); + float res = -1.0f; + program.add_argument("--float-opt").default_value(3.5f).store_into(res); + + program.parse_args({"./test.exe", "--float-opt", "5.5"}); + REQUIRE(res == 5.5f); +} + TEST_CASE("Test store_into(string), no default value, non specified" * test_suite("store_into")) { argparse::ArgumentParser program("test");