mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-09-17 17:58:09 +08:00
Merge pull request #61 from ToruNiina/as-something
feat: add as_something functions for convenience
This commit is contained in:
34
README.md
34
README.md
@@ -507,9 +507,9 @@ You can check what type of value does `toml::value` contains by `is_*` function.
|
||||
|
||||
```cpp
|
||||
toml::value v = /* ... */;
|
||||
if(v.is_integer() && toml::get<int>(v) == 42)
|
||||
if(v.is_integer())
|
||||
{
|
||||
std::cout << "value is 42" << std::endl;
|
||||
std::cout << "value is an integer" << std::endl;
|
||||
}
|
||||
```
|
||||
|
||||
@@ -553,6 +553,36 @@ toml::value v = /* ... */;
|
||||
if(v.is(toml::value_t::Boolean)) // ...
|
||||
```
|
||||
|
||||
## Casting value
|
||||
|
||||
So far, `toml::get` is introduced, but if you don't need any type conversion,
|
||||
`as_*` is simpler to use.
|
||||
|
||||
```cpp
|
||||
toml::value v = /* ... */;
|
||||
if(v.is_integer() && v.as_integer() == 42)
|
||||
{
|
||||
std::cout << "value is 42" << std::endl;
|
||||
}
|
||||
```
|
||||
|
||||
The complete list of the functions is below.
|
||||
|
||||
```cpp
|
||||
const toml::value v(/*...*/);
|
||||
v.as_boolean();
|
||||
v.as_integer();
|
||||
v.as_float();
|
||||
v.as_string();
|
||||
v.as_offset_datetime();
|
||||
v.as_local_datetime();
|
||||
v.as_local_date();
|
||||
v.as_local_time();
|
||||
v.as_array();
|
||||
v.as_table();
|
||||
v.as_uninitialized();
|
||||
```
|
||||
|
||||
## Visiting a toml::value
|
||||
|
||||
toml11 provides `toml::visit` to apply a function to `toml::value` in the
|
||||
|
@@ -30,6 +30,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean)
|
||||
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Boolean>(), false);
|
||||
BOOST_CHECK_EQUAL(v1.as_boolean(), true);
|
||||
BOOST_CHECK_EQUAL(v2.as_boolean(), false);
|
||||
|
||||
v1 = false;
|
||||
v2 = true;
|
||||
@@ -45,6 +47,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean)
|
||||
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Boolean>(), false);
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v1.as_boolean(), false);
|
||||
BOOST_CHECK_EQUAL(v2.as_boolean(), true);
|
||||
|
||||
toml::value v3(v1);
|
||||
toml::value v4(v2);
|
||||
@@ -62,6 +66,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean)
|
||||
|
||||
BOOST_CHECK_EQUAL(v3.cast<toml::value_t::Boolean>(), false);
|
||||
BOOST_CHECK_EQUAL(v4.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v3.as_boolean(), false);
|
||||
BOOST_CHECK_EQUAL(v4.as_boolean(), true);
|
||||
|
||||
toml::value v5(std::move(v1));
|
||||
toml::value v6(std::move(v2));
|
||||
@@ -77,6 +83,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean)
|
||||
|
||||
BOOST_CHECK_EQUAL(v5.cast<toml::value_t::Boolean>(), false);
|
||||
BOOST_CHECK_EQUAL(v6.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v5.as_boolean(), false);
|
||||
BOOST_CHECK_EQUAL(v6.as_boolean(), true);
|
||||
|
||||
v1 = 42;
|
||||
v2 = 3.14;
|
||||
@@ -92,6 +100,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean)
|
||||
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Integer>(), 42);
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Float>(), 3.14);
|
||||
BOOST_CHECK_EQUAL(v1.as_integer(), 42);
|
||||
BOOST_CHECK_EQUAL(v2.as_float(), 3.14);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_value_integer)
|
||||
@@ -110,6 +120,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer)
|
||||
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Integer>(), -42);
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Integer>(), 42u);
|
||||
BOOST_CHECK_EQUAL(v1.as_integer(), -42);
|
||||
BOOST_CHECK_EQUAL(v2.as_integer(), 42u);
|
||||
|
||||
v1 = 54;
|
||||
v2 = -54;
|
||||
@@ -125,6 +137,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer)
|
||||
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Integer>(), 54);
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Integer>(), -54);
|
||||
BOOST_CHECK_EQUAL(v1.as_integer(), 54);
|
||||
BOOST_CHECK_EQUAL(v2.as_integer(), -54);
|
||||
|
||||
toml::value v3(v1);
|
||||
toml::value v4(v2);
|
||||
@@ -142,6 +156,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer)
|
||||
|
||||
BOOST_CHECK_EQUAL(v3.cast<toml::value_t::Integer>(), 54);
|
||||
BOOST_CHECK_EQUAL(v4.cast<toml::value_t::Integer>(), -54);
|
||||
BOOST_CHECK_EQUAL(v3.as_integer(), 54);
|
||||
BOOST_CHECK_EQUAL(v4.as_integer(), -54);
|
||||
|
||||
toml::value v5(std::move(v1));
|
||||
toml::value v6(std::move(v2));
|
||||
@@ -157,6 +173,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer)
|
||||
|
||||
BOOST_CHECK_EQUAL(v5.cast<toml::value_t::Integer>(), 54);
|
||||
BOOST_CHECK_EQUAL(v6.cast<toml::value_t::Integer>(), -54);
|
||||
BOOST_CHECK_EQUAL(v5.as_integer(), 54);
|
||||
BOOST_CHECK_EQUAL(v6.as_integer(), -54);
|
||||
|
||||
v1 = true;
|
||||
v2 = false;
|
||||
@@ -172,6 +190,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer)
|
||||
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Boolean>(), false);
|
||||
BOOST_CHECK_EQUAL(v1.as_boolean(), true);
|
||||
BOOST_CHECK_EQUAL(v2.as_boolean(), false);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_value_float)
|
||||
@@ -188,8 +208,10 @@ BOOST_AUTO_TEST_CASE(test_value_float)
|
||||
BOOST_CHECK(v1.is_float());
|
||||
BOOST_CHECK(v2.is_float());
|
||||
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Float>(), 3.14);
|
||||
BOOST_CHECK_EQUAL (v1.cast<toml::value_t::Float>(), 3.14);
|
||||
BOOST_CHECK_CLOSE_FRACTION(v2.cast<toml::value_t::Float>(), 3.14, 1e-2);
|
||||
BOOST_CHECK_EQUAL (v1.as_float(), 3.14);
|
||||
BOOST_CHECK_CLOSE_FRACTION(v2.as_float(), 3.14, 1e-2);
|
||||
|
||||
v1 = 2.718f;
|
||||
v2 = 2.718;
|
||||
@@ -204,7 +226,9 @@ BOOST_AUTO_TEST_CASE(test_value_float)
|
||||
BOOST_CHECK(v2.is_float());
|
||||
|
||||
BOOST_CHECK_CLOSE_FRACTION(v1.cast<toml::value_t::Float>(), 2.718, 1e-3);
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Float>(), 2.718);
|
||||
BOOST_CHECK_EQUAL (v2.cast<toml::value_t::Float>(), 2.718);
|
||||
BOOST_CHECK_CLOSE_FRACTION(v1.as_float(), 2.718, 1e-3);
|
||||
BOOST_CHECK_EQUAL (v2.as_float(), 2.718);
|
||||
|
||||
toml::value v3(v1);
|
||||
toml::value v4(v2);
|
||||
@@ -221,7 +245,9 @@ BOOST_AUTO_TEST_CASE(test_value_float)
|
||||
BOOST_CHECK(v4.is_float());
|
||||
|
||||
BOOST_CHECK_CLOSE_FRACTION(v3.cast<toml::value_t::Float>(), 2.718, 1e-3);
|
||||
BOOST_CHECK_EQUAL(v4.cast<toml::value_t::Float>(), 2.718);
|
||||
BOOST_CHECK_EQUAL (v4.cast<toml::value_t::Float>(), 2.718);
|
||||
BOOST_CHECK_CLOSE_FRACTION(v3.as_float(), 2.718, 1e-3);
|
||||
BOOST_CHECK_EQUAL (v4.as_float(), 2.718);
|
||||
|
||||
toml::value v5(std::move(v1));
|
||||
toml::value v6(std::move(v2));
|
||||
@@ -236,7 +262,9 @@ BOOST_AUTO_TEST_CASE(test_value_float)
|
||||
BOOST_CHECK(v6.is_float());
|
||||
|
||||
BOOST_CHECK_CLOSE_FRACTION(v5.cast<toml::value_t::Float>(), 2.718, 1e-3);
|
||||
BOOST_CHECK_EQUAL(v6.cast<toml::value_t::Float>(), 2.718);
|
||||
BOOST_CHECK_EQUAL (v6.cast<toml::value_t::Float>(), 2.718);
|
||||
BOOST_CHECK_CLOSE_FRACTION(v5.as_float(), 2.718, 1e-3);
|
||||
BOOST_CHECK_EQUAL (v6.as_float(), 2.718);
|
||||
|
||||
v1 = true;
|
||||
v2 = false;
|
||||
@@ -252,6 +280,8 @@ BOOST_AUTO_TEST_CASE(test_value_float)
|
||||
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Boolean>(), false);
|
||||
BOOST_CHECK_EQUAL(v1.as_boolean(), true);
|
||||
BOOST_CHECK_EQUAL(v2.as_boolean(), false);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_value_string)
|
||||
@@ -276,6 +306,10 @@ BOOST_AUTO_TEST_CASE(test_value_string)
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::String>(), "foo");
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::String>(), "foo");
|
||||
BOOST_CHECK_EQUAL(v3.cast<toml::value_t::String>(), "foo");
|
||||
BOOST_CHECK_EQUAL(v1.as_string(), "foo");
|
||||
BOOST_CHECK_EQUAL(v2.as_string(), "foo");
|
||||
BOOST_CHECK_EQUAL(v3.as_string(), "foo");
|
||||
|
||||
|
||||
v1 = "bar";
|
||||
v2 = "bar";
|
||||
@@ -294,6 +328,10 @@ BOOST_AUTO_TEST_CASE(test_value_string)
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::String>(), "bar");
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::String>(), "bar");
|
||||
BOOST_CHECK_EQUAL(v3.cast<toml::value_t::String>(), "bar");
|
||||
BOOST_CHECK_EQUAL(v1.as_string(), "bar");
|
||||
BOOST_CHECK_EQUAL(v2.as_string(), "bar");
|
||||
BOOST_CHECK_EQUAL(v3.as_string(), "bar");
|
||||
|
||||
|
||||
toml::value v4(v1);
|
||||
toml::value v5(v2);
|
||||
@@ -318,6 +356,10 @@ BOOST_AUTO_TEST_CASE(test_value_string)
|
||||
BOOST_CHECK_EQUAL(v4.cast<toml::value_t::String>(), "bar");
|
||||
BOOST_CHECK_EQUAL(v5.cast<toml::value_t::String>(), "bar");
|
||||
BOOST_CHECK_EQUAL(v6.cast<toml::value_t::String>(), "bar");
|
||||
BOOST_CHECK_EQUAL(v4.as_string(), "bar");
|
||||
BOOST_CHECK_EQUAL(v5.as_string(), "bar");
|
||||
BOOST_CHECK_EQUAL(v6.as_string(), "bar");
|
||||
|
||||
|
||||
v4.cast<toml::value_t::String>().str.at(2) = 'z';
|
||||
v5.cast<toml::value_t::String>().str.at(2) = 'z';
|
||||
@@ -336,9 +378,9 @@ BOOST_AUTO_TEST_CASE(test_value_string)
|
||||
BOOST_CHECK(v5.is_string());
|
||||
BOOST_CHECK(v6.is_string());
|
||||
|
||||
BOOST_CHECK_EQUAL(v4.cast<toml::value_t::String>(), "baz");
|
||||
BOOST_CHECK_EQUAL(v5.cast<toml::value_t::String>(), "baz");
|
||||
BOOST_CHECK_EQUAL(v6.cast<toml::value_t::String>(), "baz");
|
||||
BOOST_CHECK_EQUAL(v4.as_string(), "baz");
|
||||
BOOST_CHECK_EQUAL(v5.as_string(), "baz");
|
||||
BOOST_CHECK_EQUAL(v6.as_string(), "baz");
|
||||
|
||||
v1 = true;
|
||||
v2 = true;
|
||||
@@ -360,6 +402,9 @@ BOOST_AUTO_TEST_CASE(test_value_string)
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v3.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v1.as_boolean(), true);
|
||||
BOOST_CHECK_EQUAL(v2.as_boolean(), true);
|
||||
BOOST_CHECK_EQUAL(v3.as_boolean(), true);
|
||||
|
||||
#if __cplusplus >= 201703L
|
||||
std::string_view sv = "foo";
|
||||
@@ -392,6 +437,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_date)
|
||||
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::LocalDate>(),
|
||||
toml::local_date(2018, toml::month_t::Jan, 31));
|
||||
BOOST_CHECK_EQUAL(v1.as_local_date(),
|
||||
toml::local_date(2018, toml::month_t::Jan, 31));
|
||||
|
||||
v1 = toml::local_date(2018, toml::month_t::Apr, 1);
|
||||
|
||||
@@ -402,6 +449,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_date)
|
||||
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::LocalDate>(),
|
||||
toml::local_date(2018, toml::month_t::Apr, 1));
|
||||
BOOST_CHECK_EQUAL(v1.as_local_date(),
|
||||
toml::local_date(2018, toml::month_t::Apr, 1));
|
||||
|
||||
toml::value v2(v1);
|
||||
BOOST_CHECK(v2 == v1);
|
||||
@@ -413,6 +462,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_date)
|
||||
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::LocalDate>(),
|
||||
toml::local_date(2018, toml::month_t::Apr, 1));
|
||||
BOOST_CHECK_EQUAL(v2.as_local_date(),
|
||||
toml::local_date(2018, toml::month_t::Apr, 1));
|
||||
|
||||
v1 = true;
|
||||
BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean);
|
||||
@@ -420,6 +471,7 @@ BOOST_AUTO_TEST_CASE(test_value_local_date)
|
||||
BOOST_CHECK(v1.is<toml::Boolean>());
|
||||
BOOST_CHECK(v1.is_boolean());
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v1.as_boolean(), true);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_value_local_time)
|
||||
@@ -439,10 +491,18 @@ BOOST_AUTO_TEST_CASE(test_value_local_time)
|
||||
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::LocalTime>(),
|
||||
toml::local_time(12, 30, 45));
|
||||
BOOST_CHECK_EQUAL(v1.as_local_time(),
|
||||
toml::local_time(12, 30, 45));
|
||||
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::LocalTime>(),
|
||||
toml::local_time(12, 30, 45));
|
||||
BOOST_CHECK_EQUAL(v2.as_local_time(),
|
||||
toml::local_time(12, 30, 45));
|
||||
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::LocalTime>(),
|
||||
v2.cast<toml::value_t::LocalTime>());
|
||||
BOOST_CHECK_EQUAL(v1.as_local_time(),
|
||||
v2.as_local_time());
|
||||
|
||||
v1 = toml::local_time(1, 30, 0, /*ms*/ 100, /*us*/ 0);
|
||||
|
||||
@@ -452,6 +512,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_time)
|
||||
BOOST_CHECK(v1.is_local_time());
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::LocalTime>(),
|
||||
toml::local_time(1, 30, 0, 100, 0));
|
||||
BOOST_CHECK_EQUAL(v1.as_local_time(),
|
||||
toml::local_time(1, 30, 0, 100, 0));
|
||||
|
||||
toml::value v3(v1);
|
||||
BOOST_CHECK(v3 == v1);
|
||||
@@ -463,6 +525,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_time)
|
||||
|
||||
BOOST_CHECK_EQUAL(v3.cast<toml::value_t::LocalTime>(),
|
||||
toml::local_time(1, 30, 0, 100, 0));
|
||||
BOOST_CHECK_EQUAL(v3.as_local_time(),
|
||||
toml::local_time(1, 30, 0, 100, 0));
|
||||
|
||||
v1 = true;
|
||||
BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean);
|
||||
@@ -470,6 +534,7 @@ BOOST_AUTO_TEST_CASE(test_value_local_time)
|
||||
BOOST_CHECK(v1.is<toml::Boolean>());
|
||||
BOOST_CHECK(v1.is_boolean());
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v1.as_boolean(), true);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_value_local_datetime)
|
||||
@@ -488,6 +553,10 @@ BOOST_AUTO_TEST_CASE(test_value_local_datetime)
|
||||
toml::local_datetime(
|
||||
toml::local_date(2018, toml::month_t::Jan, 31),
|
||||
toml::local_time(12, 30, 45)));
|
||||
BOOST_CHECK_EQUAL(v1.as_local_datetime(),
|
||||
toml::local_datetime(
|
||||
toml::local_date(2018, toml::month_t::Jan, 31),
|
||||
toml::local_time(12, 30, 45)));
|
||||
|
||||
v1 = toml::local_datetime(
|
||||
toml::local_date(2018, toml::month_t::Apr, 1),
|
||||
@@ -502,6 +571,10 @@ BOOST_AUTO_TEST_CASE(test_value_local_datetime)
|
||||
toml::local_datetime(
|
||||
toml::local_date(2018, toml::month_t::Apr, 1),
|
||||
toml::local_time(1, 15, 30)));
|
||||
BOOST_CHECK_EQUAL(v1.as_local_datetime(),
|
||||
toml::local_datetime(
|
||||
toml::local_date(2018, toml::month_t::Apr, 1),
|
||||
toml::local_time(1, 15, 30)));
|
||||
|
||||
toml::value v2(v1);
|
||||
BOOST_CHECK(v2 == v1);
|
||||
@@ -515,6 +588,11 @@ BOOST_AUTO_TEST_CASE(test_value_local_datetime)
|
||||
toml::local_datetime(
|
||||
toml::local_date(2018, toml::month_t::Apr, 1),
|
||||
toml::local_time(1, 15, 30)));
|
||||
BOOST_CHECK_EQUAL(v2.as_local_datetime(),
|
||||
toml::local_datetime(
|
||||
toml::local_date(2018, toml::month_t::Apr, 1),
|
||||
toml::local_time(1, 15, 30)));
|
||||
|
||||
|
||||
v1 = true;
|
||||
BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean);
|
||||
@@ -522,6 +600,7 @@ BOOST_AUTO_TEST_CASE(test_value_local_datetime)
|
||||
BOOST_CHECK(v1.is<toml::Boolean>());
|
||||
BOOST_CHECK(v1.is_boolean());
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v1.as_boolean(), true);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_value_offset_datetime)
|
||||
@@ -543,6 +622,12 @@ BOOST_AUTO_TEST_CASE(test_value_offset_datetime)
|
||||
toml::local_time(12, 30, 45),
|
||||
toml::time_offset(9, 0)
|
||||
));
|
||||
BOOST_CHECK_EQUAL(v1.as_offset_datetime(),
|
||||
toml::offset_datetime(
|
||||
toml::local_date(2018, toml::month_t::Jan, 31),
|
||||
toml::local_time(12, 30, 45),
|
||||
toml::time_offset(9, 0)
|
||||
));
|
||||
|
||||
v1 = toml::offset_datetime(
|
||||
toml::local_date(2018, toml::month_t::Apr, 1),
|
||||
@@ -559,6 +644,12 @@ BOOST_AUTO_TEST_CASE(test_value_offset_datetime)
|
||||
toml::local_date(2018, toml::month_t::Apr, 1),
|
||||
toml::local_time(1, 15, 30),
|
||||
toml::time_offset(9, 0)));
|
||||
BOOST_CHECK_EQUAL(v1.as_offset_datetime(),
|
||||
toml::offset_datetime(
|
||||
toml::local_date(2018, toml::month_t::Apr, 1),
|
||||
toml::local_time(1, 15, 30),
|
||||
toml::time_offset(9, 0)));
|
||||
|
||||
|
||||
toml::value v2(v1);
|
||||
BOOST_CHECK(v2 == v1);
|
||||
@@ -573,12 +664,19 @@ BOOST_AUTO_TEST_CASE(test_value_offset_datetime)
|
||||
toml::local_date(2018, toml::month_t::Apr, 1),
|
||||
toml::local_time(1, 15, 30),
|
||||
toml::time_offset(9, 0)));
|
||||
BOOST_CHECK_EQUAL(v2.as_offset_datetime(),
|
||||
toml::offset_datetime(
|
||||
toml::local_date(2018, toml::month_t::Apr, 1),
|
||||
toml::local_time(1, 15, 30),
|
||||
toml::time_offset(9, 0)));
|
||||
|
||||
v1 = true;
|
||||
BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean);
|
||||
BOOST_CHECK(v1.is(toml::value_t::Boolean));
|
||||
BOOST_CHECK(v1.is<toml::Boolean>());
|
||||
BOOST_CHECK(v1.is_boolean());
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v1.as_boolean(), true);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_value_array)
|
||||
@@ -602,6 +700,12 @@ BOOST_AUTO_TEST_CASE(test_value_array)
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Array>().at(2).cast<toml::value_t::Integer>(), 3);
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Array>().at(3).cast<toml::value_t::Integer>(), 4);
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Array>().at(4).cast<toml::value_t::Integer>(), 5);
|
||||
BOOST_CHECK_EQUAL(v1.as_array().at(0).as_integer(), 1);
|
||||
BOOST_CHECK_EQUAL(v1.as_array().at(1).as_integer(), 2);
|
||||
BOOST_CHECK_EQUAL(v1.as_array().at(2).as_integer(), 3);
|
||||
BOOST_CHECK_EQUAL(v1.as_array().at(3).as_integer(), 4);
|
||||
BOOST_CHECK_EQUAL(v1.as_array().at(4).as_integer(), 5);
|
||||
|
||||
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Array>().at(0).cast<toml::value_t::Integer>(), 6);
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Array>().at(1).cast<toml::value_t::Integer>(), 7);
|
||||
@@ -627,12 +731,24 @@ BOOST_AUTO_TEST_CASE(test_value_array)
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Array>().at(2).cast<toml::value_t::Integer>(), 8);
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Array>().at(3).cast<toml::value_t::Integer>(), 9);
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Array>().at(4).cast<toml::value_t::Integer>(), 0);
|
||||
BOOST_CHECK_EQUAL(v1.as_array().at(0).as_integer(), 6);
|
||||
BOOST_CHECK_EQUAL(v1.as_array().at(1).as_integer(), 7);
|
||||
BOOST_CHECK_EQUAL(v1.as_array().at(2).as_integer(), 8);
|
||||
BOOST_CHECK_EQUAL(v1.as_array().at(3).as_integer(), 9);
|
||||
BOOST_CHECK_EQUAL(v1.as_array().at(4).as_integer(), 0);
|
||||
|
||||
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Array>().at(0).cast<toml::value_t::Integer>(), 1);
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Array>().at(1).cast<toml::value_t::Integer>(), 2);
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Array>().at(2).cast<toml::value_t::Integer>(), 3);
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Array>().at(3).cast<toml::value_t::Integer>(), 4);
|
||||
BOOST_CHECK_EQUAL(v2.cast<toml::value_t::Array>().at(4).cast<toml::value_t::Integer>(), 5);
|
||||
BOOST_CHECK_EQUAL(v2.as_array().at(0).as_integer(), 1);
|
||||
BOOST_CHECK_EQUAL(v2.as_array().at(1).as_integer(), 2);
|
||||
BOOST_CHECK_EQUAL(v2.as_array().at(2).as_integer(), 3);
|
||||
BOOST_CHECK_EQUAL(v2.as_array().at(3).as_integer(), 4);
|
||||
BOOST_CHECK_EQUAL(v2.as_array().at(4).as_integer(), 5);
|
||||
|
||||
|
||||
toml::value v3(v1);
|
||||
BOOST_CHECK(v3 == v1);
|
||||
@@ -647,6 +763,12 @@ BOOST_AUTO_TEST_CASE(test_value_array)
|
||||
BOOST_CHECK_EQUAL(v3.cast<toml::value_t::Array>().at(2).cast<toml::value_t::Integer>(), 8);
|
||||
BOOST_CHECK_EQUAL(v3.cast<toml::value_t::Array>().at(3).cast<toml::value_t::Integer>(), 9);
|
||||
BOOST_CHECK_EQUAL(v3.cast<toml::value_t::Array>().at(4).cast<toml::value_t::Integer>(), 0);
|
||||
BOOST_CHECK_EQUAL(v3.as_array().at(0).as_integer(), 6);
|
||||
BOOST_CHECK_EQUAL(v3.as_array().at(1).as_integer(), 7);
|
||||
BOOST_CHECK_EQUAL(v3.as_array().at(2).as_integer(), 8);
|
||||
BOOST_CHECK_EQUAL(v3.as_array().at(3).as_integer(), 9);
|
||||
BOOST_CHECK_EQUAL(v3.as_array().at(4).as_integer(), 0);
|
||||
|
||||
|
||||
v1 = true;
|
||||
BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean);
|
||||
@@ -654,6 +776,7 @@ BOOST_AUTO_TEST_CASE(test_value_array)
|
||||
BOOST_CHECK(v1.is<toml::Boolean>());
|
||||
BOOST_CHECK(v1.is_boolean());
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v1.as_boolean(), true);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_value_table)
|
||||
@@ -668,6 +791,10 @@ BOOST_AUTO_TEST_CASE(test_value_table)
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Table>().at("foo").cast<toml::value_t::Integer>(), 42);
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Table>().at("bar").cast<toml::value_t::Float>(), 3.14);
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Table>().at("baz").cast<toml::value_t::String>().str, "qux");
|
||||
BOOST_CHECK_EQUAL(v1.as_table().at("foo").as_integer(), 42);
|
||||
BOOST_CHECK_EQUAL(v1.as_table().at("bar").as_float(), 3.14);
|
||||
BOOST_CHECK_EQUAL(v1.as_table().at("baz").as_string().str, "qux");
|
||||
|
||||
|
||||
v1 = toml::table{{"foo", 2.71}, {"bar", 54}, {"baz", "quux"}};
|
||||
|
||||
@@ -679,6 +806,10 @@ BOOST_AUTO_TEST_CASE(test_value_table)
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Table>().at("foo").cast<toml::value_t::Float>(), 2.71);
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Table>().at("bar").cast<toml::value_t::Integer>(), 54);
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Table>().at("baz").cast<toml::value_t::String>().str, "quux");
|
||||
BOOST_CHECK_EQUAL(v1.as_table().at("foo").as_float(), 2.71);
|
||||
BOOST_CHECK_EQUAL(v1.as_table().at("bar").as_integer(), 54);
|
||||
BOOST_CHECK_EQUAL(v1.as_table().at("baz").as_string().str, "quux");
|
||||
|
||||
|
||||
toml::value v3(v1);
|
||||
BOOST_CHECK(v3 == v1);
|
||||
@@ -691,6 +822,10 @@ BOOST_AUTO_TEST_CASE(test_value_table)
|
||||
BOOST_CHECK_EQUAL(v3.cast<toml::value_t::Table>().at("foo").cast<toml::value_t::Float>(), 2.71);
|
||||
BOOST_CHECK_EQUAL(v3.cast<toml::value_t::Table>().at("bar").cast<toml::value_t::Integer>(), 54);
|
||||
BOOST_CHECK_EQUAL(v3.cast<toml::value_t::Table>().at("baz").cast<toml::value_t::String>().str, "quux");
|
||||
BOOST_CHECK_EQUAL(v3.as_table().at("foo").as_float(), 2.71);
|
||||
BOOST_CHECK_EQUAL(v3.as_table().at("bar").as_integer(), 54);
|
||||
BOOST_CHECK_EQUAL(v3.as_table().at("baz").as_string().str, "quux");
|
||||
|
||||
|
||||
v1 = true;
|
||||
BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean);
|
||||
@@ -698,6 +833,7 @@ BOOST_AUTO_TEST_CASE(test_value_table)
|
||||
BOOST_CHECK(v1.is<toml::Boolean>());
|
||||
BOOST_CHECK(v1.is_boolean());
|
||||
BOOST_CHECK_EQUAL(v1.cast<toml::value_t::Boolean>(), true);
|
||||
BOOST_CHECK_EQUAL(v1.as_boolean(), true);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_value_empty)
|
||||
|
@@ -633,6 +633,28 @@ class value
|
||||
template<value_t T>
|
||||
typename detail::toml_default_type<T>::type&& cast() &&;
|
||||
|
||||
boolean const& as_boolean() const {return this->cast<value_t::Boolean >();}
|
||||
integer const& as_integer() const {return this->cast<value_t::Integer >();}
|
||||
floating const& as_float() const {return this->cast<value_t::Float >();}
|
||||
string const& as_string() const {return this->cast<value_t::String >();}
|
||||
offset_datetime const& as_offset_datetime() const {return this->cast<value_t::OffsetDatetime>();}
|
||||
local_datetime const& as_local_datetime() const {return this->cast<value_t::LocalDatetime >();}
|
||||
local_date const& as_local_date() const {return this->cast<value_t::LocalDate >();}
|
||||
local_time const& as_local_time() const {return this->cast<value_t::LocalTime >();}
|
||||
array const& as_array() const {return this->cast<value_t::Array >();}
|
||||
table const& as_table() const {return this->cast<value_t::Table >();}
|
||||
|
||||
boolean& as_boolean() {return this->cast<value_t::Boolean >();}
|
||||
integer& as_integer() {return this->cast<value_t::Integer >();}
|
||||
floating& as_float() {return this->cast<value_t::Float >();}
|
||||
string& as_string() {return this->cast<value_t::String >();}
|
||||
offset_datetime& as_offset_datetime() {return this->cast<value_t::OffsetDatetime>();}
|
||||
local_datetime& as_local_datetime() {return this->cast<value_t::LocalDatetime >();}
|
||||
local_date& as_local_date() {return this->cast<value_t::LocalDate >();}
|
||||
local_time& as_local_time() {return this->cast<value_t::LocalTime >();}
|
||||
array& as_array() {return this->cast<value_t::Array >();}
|
||||
table& as_table() {return this->cast<value_t::Table >();}
|
||||
|
||||
std::string comment() const
|
||||
{
|
||||
return this->region_info_->comment();
|
||||
|
Reference in New Issue
Block a user