mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-09-18 02:08:09 +08:00
test: update test codes to v4
This commit is contained in:
143
tests/test_format_floating.cpp
Normal file
143
tests/test_format_floating.cpp
Normal file
@@ -0,0 +1,143 @@
|
||||
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
|
||||
#include "doctest.h"
|
||||
|
||||
#include <toml11/parser.hpp>
|
||||
#include <toml11/serializer.hpp>
|
||||
#include <toml11/types.hpp>
|
||||
|
||||
TEST_CASE("testing fractional float")
|
||||
{
|
||||
auto fmt = [](std::size_t prec) {
|
||||
toml::floating_format_info f;
|
||||
f.fmt = toml::floating_format::fixed;
|
||||
f.prec = prec;
|
||||
return f;
|
||||
};
|
||||
|
||||
auto format_as = [](const double f, int w) -> std::string {
|
||||
std::ostringstream oss;
|
||||
oss.imbue(std::locale::classic());
|
||||
oss << std::fixed << std::setprecision(w) << f;
|
||||
return oss.str();
|
||||
};
|
||||
|
||||
CHECK_EQ(format_as( 1.0 , 1), toml::format(toml::value( 1.0 , fmt( 1))));
|
||||
CHECK_EQ(format_as( 0.1 , 1), toml::format(toml::value( 0.1 , fmt( 1))));
|
||||
CHECK_EQ(format_as( 0.001 , 3), toml::format(toml::value( 0.001 , fmt( 3))));
|
||||
CHECK_EQ(format_as( 0.1 , 3), toml::format(toml::value( 0.1 , fmt( 3))));
|
||||
CHECK_EQ(format_as( 3.14 , 2), toml::format(toml::value( 3.14 , fmt( 2))));
|
||||
CHECK_EQ(format_as(-3.14 , 2), toml::format(toml::value(-3.14 , fmt( 2))));
|
||||
CHECK_EQ(format_as( 3.141592653589, 12), toml::format(toml::value( 3.141592653589, fmt(12))));
|
||||
CHECK_EQ(format_as(-3.141592653589, 12), toml::format(toml::value(-3.141592653589, fmt(12))));
|
||||
}
|
||||
|
||||
TEST_CASE("testing scientific float")
|
||||
{
|
||||
auto fmt = [](std::size_t prec) {
|
||||
toml::floating_format_info f;
|
||||
f.fmt = toml::floating_format::scientific;
|
||||
f.prec = prec;
|
||||
return f;
|
||||
};
|
||||
|
||||
auto format_as = [](const double f, int w) -> std::string {
|
||||
std::ostringstream oss;
|
||||
oss.imbue(std::locale::classic());
|
||||
oss << std::scientific << std::setprecision(w) << f;
|
||||
return oss.str();
|
||||
};
|
||||
|
||||
CHECK_EQ(format_as( 1.0 , 1), toml::format(toml::value( 1.0 , fmt( 1))));
|
||||
CHECK_EQ(format_as( 0.1 , 1), toml::format(toml::value( 0.1 , fmt( 1))));
|
||||
CHECK_EQ(format_as( 0.001 , 3), toml::format(toml::value( 0.001 , fmt( 3))));
|
||||
CHECK_EQ(format_as( 0.1 , 3), toml::format(toml::value( 0.1 , fmt( 3))));
|
||||
CHECK_EQ(format_as( 3.14 , 2), toml::format(toml::value( 3.14 , fmt( 2))));
|
||||
CHECK_EQ(format_as(-3.14 , 2), toml::format(toml::value(-3.14 , fmt( 2))));
|
||||
CHECK_EQ(format_as( 3.141592653589, 12), toml::format(toml::value( 3.141592653589, fmt(12))));
|
||||
CHECK_EQ(format_as(-3.141592653589, 12), toml::format(toml::value(-3.141592653589, fmt(12))));
|
||||
}
|
||||
|
||||
TEST_CASE("testing hex float")
|
||||
{
|
||||
toml::spec s = toml::spec::v(1,0,0);
|
||||
s.ext_hex_float = true;
|
||||
|
||||
toml::floating_format_info fmt;
|
||||
fmt.fmt = toml::floating_format::hex;
|
||||
|
||||
auto format_as = [](const double f) -> std::string {
|
||||
std::ostringstream oss;
|
||||
oss.imbue(std::locale::classic());
|
||||
oss << std::hexfloat << f;
|
||||
return oss.str();
|
||||
};
|
||||
|
||||
CHECK_EQ(format_as( 1.0 ), toml::format(toml::value( 1.0 , fmt), s));
|
||||
CHECK_EQ(format_as( 0.1 ), toml::format(toml::value( 0.1 , fmt), s));
|
||||
CHECK_EQ(format_as( 0.001 ), toml::format(toml::value( 0.001 , fmt), s));
|
||||
CHECK_EQ(format_as( 0.1 ), toml::format(toml::value( 0.1 , fmt), s));
|
||||
CHECK_EQ(format_as( 3.14 ), toml::format(toml::value( 3.14 , fmt), s));
|
||||
CHECK_EQ(format_as(-3.14 ), toml::format(toml::value(-3.14 , fmt), s));
|
||||
CHECK_EQ(format_as( 3.141592653589), toml::format(toml::value( 3.141592653589, fmt), s));
|
||||
CHECK_EQ(format_as(-3.141592653589), toml::format(toml::value(-3.141592653589, fmt), s));
|
||||
}
|
||||
|
||||
TEST_CASE("testing suffix + fractional")
|
||||
{
|
||||
toml::spec s = toml::spec::v(1,0,0);
|
||||
s.ext_hex_float = true;
|
||||
s.ext_num_suffix = true;
|
||||
|
||||
auto fmt = [](std::string sfx) {
|
||||
toml::floating_format_info f;
|
||||
f.fmt = toml::floating_format::fixed;
|
||||
f.suffix = sfx;
|
||||
return f;
|
||||
};
|
||||
|
||||
auto format_as = [](const double f, std::string sfx) -> std::string {
|
||||
std::ostringstream oss;
|
||||
oss.imbue(std::locale::classic());
|
||||
oss << std::fixed << f << "_" << sfx;
|
||||
return oss.str();
|
||||
};
|
||||
|
||||
CHECK_EQ(format_as( 1.0 , "m" ), toml::format(toml::value( 1.0 , fmt("m" )), s));
|
||||
CHECK_EQ(format_as( 0.1 , "m" ), toml::format(toml::value( 0.1 , fmt("m" )), s));
|
||||
CHECK_EQ(format_as( 0.001 , "mm" ), toml::format(toml::value( 0.001 , fmt("mm" )), s));
|
||||
CHECK_EQ(format_as( 0.1 , "mm" ), toml::format(toml::value( 0.1 , fmt("mm" )), s));
|
||||
CHECK_EQ(format_as( 3.14 , "rad"), toml::format(toml::value( 3.14 , fmt("rad")), s));
|
||||
CHECK_EQ(format_as(-3.14 , "rad"), toml::format(toml::value(-3.14 , fmt("rad")), s));
|
||||
CHECK_EQ(format_as( 3.141592653589, "rad"), toml::format(toml::value( 3.141592653589, fmt("rad")), s));
|
||||
CHECK_EQ(format_as(-3.141592653589, "rad"), toml::format(toml::value(-3.141592653589, fmt("rad")), s));
|
||||
}
|
||||
|
||||
TEST_CASE("testing suffix + scientific")
|
||||
{
|
||||
toml::spec s = toml::spec::v(1,0,0);
|
||||
s.ext_hex_float = true;
|
||||
s.ext_num_suffix = true;
|
||||
|
||||
auto fmt = [](std::string sfx) {
|
||||
toml::floating_format_info f;
|
||||
f.fmt = toml::floating_format::scientific;
|
||||
f.suffix = sfx;
|
||||
return f;
|
||||
};
|
||||
|
||||
auto format_as = [](const double f, std::string sfx) -> std::string {
|
||||
std::ostringstream oss;
|
||||
oss.imbue(std::locale::classic());
|
||||
oss << std::scientific << f << "_" << sfx;
|
||||
return oss.str();
|
||||
};
|
||||
|
||||
CHECK_EQ(format_as( 1.0 , "m" ), toml::format(toml::value( 1.0 , fmt("m" )), s));
|
||||
CHECK_EQ(format_as( 0.1 , "m" ), toml::format(toml::value( 0.1 , fmt("m" )), s));
|
||||
CHECK_EQ(format_as( 0.001 , "mm" ), toml::format(toml::value( 0.001 , fmt("mm" )), s));
|
||||
CHECK_EQ(format_as( 0.1 , "mm" ), toml::format(toml::value( 0.1 , fmt("mm" )), s));
|
||||
CHECK_EQ(format_as( 3.14 , "rad"), toml::format(toml::value( 3.14 , fmt("rad")), s));
|
||||
CHECK_EQ(format_as(-3.14 , "rad"), toml::format(toml::value(-3.14 , fmt("rad")), s));
|
||||
CHECK_EQ(format_as( 3.141592653589, "rad"), toml::format(toml::value( 3.141592653589, fmt("rad")), s));
|
||||
CHECK_EQ(format_as(-3.141592653589, "rad"), toml::format(toml::value(-3.141592653589, fmt("rad")), s));
|
||||
}
|
Reference in New Issue
Block a user