diff --git a/tests/test_extended_conversions.cpp b/tests/test_extended_conversions.cpp index f9653b2..428f477 100644 --- a/tests/test_extended_conversions.cpp +++ b/tests/test_extended_conversions.cpp @@ -47,8 +47,6 @@ struct qux struct foobar { - foobar() = default; // later we use std::vector, default ctor is required. - // via constructor explicit foobar(const toml::value& v) : a(toml::find(v, "a")), b(toml::find(v, "b")) @@ -137,8 +135,6 @@ struct qux struct foobar { - foobar() = default; // later we use std::vector, default ctor is required. - template class M, template class A> explicit foobar(const toml::basic_value& v) : a(toml::find(v, "a")), b(toml::find(v, "b")) @@ -488,5 +484,64 @@ BOOST_AUTO_TEST_CASE(test_recursive_conversion) BOOST_TEST(foobars.at(2).b == "quux"); BOOST_TEST(foobars.at(3).b == "foobar"); } + + // via constructor + { + const toml::value v{ + {"0", toml::table{{"a", 42}, {"b", "baz"}}}, + {"1", toml::table{{"a", 43}, {"b", "qux"}}}, + {"2", toml::table{{"a", 44}, {"b", "quux"}}}, + {"3", toml::table{{"a", 45}, {"b", "foobar"}}} + }; + + { + const auto foobars = toml::get>(v); + BOOST_TEST(foobars.size() == 4ul); + BOOST_TEST(foobars.at("0").a == 42); + BOOST_TEST(foobars.at("1").a == 43); + BOOST_TEST(foobars.at("2").a == 44); + BOOST_TEST(foobars.at("3").a == 45); + + BOOST_TEST(foobars.at("0").b == "baz"); + BOOST_TEST(foobars.at("1").b == "qux"); + BOOST_TEST(foobars.at("2").b == "quux"); + BOOST_TEST(foobars.at("3").b == "foobar"); + } + { + const auto foobars = toml::get>(v); + BOOST_TEST(foobars.size() == 4ul); + BOOST_TEST(foobars.at("0").a == 42); + BOOST_TEST(foobars.at("1").a == 43); + BOOST_TEST(foobars.at("2").a == 44); + BOOST_TEST(foobars.at("3").a == 45); + + BOOST_TEST(foobars.at("0").b == "baz"); + BOOST_TEST(foobars.at("1").b == "qux"); + BOOST_TEST(foobars.at("2").b == "quux"); + BOOST_TEST(foobars.at("3").b == "foobar"); + } + } + { + const toml::basic_value + v{ + {"0", toml::table{{"a", 42}, {"b", "baz"}}}, + {"1", toml::table{{"a", 43}, {"b", "qux"}}}, + {"2", toml::table{{"a", 44}, {"b", "quux"}}}, + {"3", toml::table{{"a", 45}, {"b", "foobar"}}} + }; + + const auto foobars = toml::get>(v); + BOOST_TEST(foobars.size() == 4ul); + BOOST_TEST(foobars.at("0").a == 42); + BOOST_TEST(foobars.at("1").a == 43); + BOOST_TEST(foobars.at("2").a == 44); + BOOST_TEST(foobars.at("3").a == 45); + + BOOST_TEST(foobars.at("0").b == "baz"); + BOOST_TEST(foobars.at("1").b == "qux"); + BOOST_TEST(foobars.at("2").b == "quux"); + BOOST_TEST(foobars.at("3").b == "foobar"); + } + }