@@ -5,6 +5,7 @@
|
||||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <limits>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
@@ -270,3 +271,22 @@ BOOST_AUTO_TEST_CASE(modulus_load_config_handles_files) {
|
||||
auto invalid = modulus::load_config(invalid_path.string());
|
||||
BOOST_REQUIRE(!invalid.has_value());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(modulus_json_float_fields_validate_numeric_types_and_bounds) {
|
||||
auto object = boost::json::object{};
|
||||
auto options = modulus::json_config::options{.category = "domain", .invalid_argument_code = 42};
|
||||
auto read = [&] { return modulus::json_config::optional_float64_field(object, "gain", 0.5, 0.0, 1.0, options); };
|
||||
BOOST_REQUIRE(read());
|
||||
BOOST_TEST(static_cast<double>(*read()) == 0.5);
|
||||
for (auto const &value : {boost::json::value{0}, boost::json::value{std::uint64_t{1}}, boost::json::value{0.25}}) {
|
||||
object["gain"] = value;
|
||||
BOOST_REQUIRE(read());
|
||||
}
|
||||
for (auto const &value : {boost::json::value{-1}, boost::json::value{2U}, boost::json::value{true}, boost::json::value{"0.5"}, boost::json::value{nullptr}, boost::json::value{std::numeric_limits<double>::infinity()}, boost::json::value{std::numeric_limits<double>::quiet_NaN()}}) {
|
||||
object["gain"] = value;
|
||||
auto result = read();
|
||||
BOOST_REQUIRE(!result);
|
||||
BOOST_TEST(std::string{result.error().category()} == "domain");
|
||||
BOOST_TEST(result.error().code() == 42);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user