From d9b8582c47155905a64cc12952027aa51c1a420b Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Sun, 1 Sep 2019 19:39:37 +0900 Subject: [PATCH] test: add test for toml::get(std::move(v)) --- tests/test_get.cpp | 258 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 194 insertions(+), 64 deletions(-) diff --git a/tests/test_get.cpp b/tests/test_get.cpp index df4297a..d8ce18c 100644 --- a/tests/test_get.cpp +++ b/tests/test_get.cpp @@ -31,6 +31,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_exact, value_type, test_value_types) toml::get(v) = false; BOOST_TEST(false == toml::get(v)); + + toml::boolean x = toml::get(std::move(v)); + BOOST_TEST(false == x); } { value_type v(42); @@ -38,6 +41,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_exact, value_type, test_value_types) toml::get(v) = 54; BOOST_TEST(toml::integer(54) == toml::get(v)); + + toml::integer x = toml::get(std::move(v)); + BOOST_TEST(toml::integer(54) == x); } { value_type v(3.14); @@ -45,6 +51,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_exact, value_type, test_value_types) toml::get(v) = 2.71; BOOST_TEST(toml::floating(2.71) == toml::get(v)); + + toml::floating x = toml::get(std::move(v)); + BOOST_TEST(toml::floating(2.71) == x); } { value_type v("foo"); @@ -54,6 +63,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_exact, value_type, test_value_types) toml::get(v).str += "bar"; BOOST_TEST(toml::string("foobar", toml::string_t::basic) == toml::get(v)); + + toml::string x = toml::get(std::move(v)); + BOOST_TEST(toml::string("foobar") == x); } { value_type v("foo", toml::string_t::literal); @@ -63,6 +75,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_exact, value_type, test_value_types) toml::get(v).str += "bar"; BOOST_TEST(toml::string("foobar", toml::string_t::literal) == toml::get(v)); + + toml::string x = toml::get(std::move(v)); + BOOST_TEST(toml::string("foobar", toml::string_t::literal) == x); } { toml::local_date d(2018, toml::month_t::Apr, 22); @@ -72,6 +87,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_exact, value_type, test_value_types) toml::get(v).year = 2017; d.year = 2017; BOOST_TEST(d == toml::get(v)); + + toml::local_date x = toml::get(std::move(v)); + BOOST_TEST(d == x); } { toml::local_time t(12, 30, 45); @@ -81,6 +99,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_exact, value_type, test_value_types) toml::get(v).hour = 9; t.hour = 9; BOOST_TEST(t == toml::get(v)); + + toml::local_time x = toml::get(std::move(v)); + BOOST_TEST(t == x); } { toml::local_datetime dt(toml::local_date(2018, toml::month_t::Apr, 22), @@ -91,6 +112,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_exact, value_type, test_value_types) toml::get(v).date.year = 2017; dt.date.year = 2017; BOOST_TEST(dt == toml::get(v)); + + toml::local_datetime x = toml::get(std::move(v)); + BOOST_TEST(dt == x); } { toml::offset_datetime dt(toml::local_datetime( @@ -102,6 +126,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_exact, value_type, test_value_types) toml::get(v).date.year = 2017; dt.date.year = 2017; BOOST_TEST(dt == toml::get(v)); + + toml::offset_datetime x = toml::get(std::move(v)); + BOOST_TEST(dt == x); } { using array_type = typename value_type::array_type; @@ -114,6 +141,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_exact, value_type, test_value_types) toml::get(v).push_back(value_type(123)); vec.push_back(value_type(123)); BOOST_TEST(vec == toml::get(v)); + + array_type x = toml::get(std::move(v)); + BOOST_TEST(vec == x); } { using table_type = typename value_type::table_type; @@ -126,6 +156,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_exact, value_type, test_value_types) toml::get(v)["key3"] = value_type(123); tab["key3"] = value_type(123); BOOST_TEST(tab == toml::get(v)); + + table_type x = toml::get(std::move(v)); + BOOST_TEST(tab == x); } { value_type v1(42); @@ -134,6 +167,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_exact, value_type, test_value_types) value_type v2(54); toml::get(v1) = v2; BOOST_TEST(v2 == toml::get(v1)); + + value_type x = toml::get(std::move(v1)); + BOOST_TEST(v2 == x); } } @@ -150,6 +186,8 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_integer_type, value_type, test_value_type BOOST_TEST(std::uint64_t(42) == toml::get(v)); BOOST_TEST(std::int16_t(42) == toml::get(v)); BOOST_TEST(std::uint16_t(42) == toml::get(v)); + + BOOST_TEST(std::uint16_t(42) == toml::get(std::move(v))); } } @@ -160,6 +198,8 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_floating_type, value_type, test_value_typ BOOST_TEST(static_cast(3.14) == toml::get(v)); BOOST_TEST(static_cast(3.14) == toml::get(v)); BOOST_TEST(static_cast(3.14) == toml::get(v)); + + BOOST_TEST(3.14f == toml::get(std::move(v))); } } @@ -170,12 +210,18 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_string_type, value_type, test_value_types BOOST_TEST("foo" == toml::get(v)); toml::get(v) += "bar"; BOOST_TEST("foobar" == toml::get(v)); + + const auto x = toml::get(std::move(v)); + BOOST_TEST("foobar" == x); } { value_type v("foo", toml::string_t::literal); BOOST_TEST("foo" == toml::get(v)); toml::get(v) += "bar"; BOOST_TEST("foobar" == toml::get(v)); + + const auto x = toml::get(std::move(v)); + BOOST_TEST("foobar" == x); } #if __cplusplus >= 201703L @@ -192,92 +238,176 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_string_type, value_type, test_value_types BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_toml_array, value_type, test_value_types) { - const value_type v{42, 54, 69, 72}; + { + const value_type v{42, 54, 69, 72}; - const std::vector vec = toml::get>(v); - const std::list lst = toml::get>(v); - const std::deque deq = toml::get>(v); + const std::vector vec = toml::get>(v); + const std::list lst = toml::get>(v); + const std::deque deq = toml::get>(v); - BOOST_TEST(42 == vec.at(0)); - BOOST_TEST(54 == vec.at(1)); - BOOST_TEST(69 == vec.at(2)); - BOOST_TEST(72 == vec.at(3)); + BOOST_TEST(42 == vec.at(0)); + BOOST_TEST(54 == vec.at(1)); + BOOST_TEST(69 == vec.at(2)); + BOOST_TEST(72 == vec.at(3)); - std::list::const_iterator iter = lst.begin(); - BOOST_TEST(static_cast(42) == *(iter++)); - BOOST_TEST(static_cast(54) == *(iter++)); - BOOST_TEST(static_cast(69) == *(iter++)); - BOOST_TEST(static_cast(72) == *(iter++)); + std::list::const_iterator iter = lst.begin(); + BOOST_TEST(static_cast(42) == *(iter++)); + BOOST_TEST(static_cast(54) == *(iter++)); + BOOST_TEST(static_cast(69) == *(iter++)); + BOOST_TEST(static_cast(72) == *(iter++)); - BOOST_TEST(static_cast(42) == deq.at(0)); - BOOST_TEST(static_cast(54) == deq.at(1)); - BOOST_TEST(static_cast(69) == deq.at(2)); - BOOST_TEST(static_cast(72) == deq.at(3)); + BOOST_TEST(static_cast(42) == deq.at(0)); + BOOST_TEST(static_cast(54) == deq.at(1)); + BOOST_TEST(static_cast(69) == deq.at(2)); + BOOST_TEST(static_cast(72) == deq.at(3)); - std::array ary = toml::get>(v); - BOOST_TEST(static_cast(42) == ary.at(0)); - BOOST_TEST(static_cast(54) == ary.at(1)); - BOOST_TEST(static_cast(69) == ary.at(2)); - BOOST_TEST(static_cast(72) == ary.at(3)); + std::array ary = toml::get>(v); + BOOST_TEST(static_cast(42) == ary.at(0)); + BOOST_TEST(static_cast(54) == ary.at(1)); + BOOST_TEST(static_cast(69) == ary.at(2)); + BOOST_TEST(static_cast(72) == ary.at(3)); - std::tuple tpl = - toml::get>(v); - BOOST_TEST(static_cast(42) == std::get<0>(tpl)); - BOOST_TEST(static_cast(54) == std::get<1>(tpl)); - BOOST_TEST(static_cast(69) == std::get<2>(tpl)); - BOOST_TEST(static_cast(72) == std::get<3>(tpl)); + std::tuple tpl = + toml::get>(v); + BOOST_TEST(static_cast(42) == std::get<0>(tpl)); + BOOST_TEST(static_cast(54) == std::get<1>(tpl)); + BOOST_TEST(static_cast(69) == std::get<2>(tpl)); + BOOST_TEST(static_cast(72) == std::get<3>(tpl)); - const value_type p{3.14, 2.71}; - std::pair pr = toml::get >(p); - BOOST_TEST(3.14 == pr.first); - BOOST_TEST(2.71 == pr.second); + const value_type p{3.14, 2.71}; + std::pair pr = toml::get >(p); + BOOST_TEST(3.14 == pr.first); + BOOST_TEST(2.71 == pr.second); + } + + { + value_type v{42, 54, 69, 72}; + const std::vector vec = toml::get>(std::move(v)); + BOOST_TEST(42 == vec.at(0)); + BOOST_TEST(54 == vec.at(1)); + BOOST_TEST(69 == vec.at(2)); + BOOST_TEST(72 == vec.at(3)); + } + { + value_type v{42, 54, 69, 72}; + const std::deque deq = toml::get>(std::move(v)); + BOOST_TEST(42 == deq.at(0)); + BOOST_TEST(54 == deq.at(1)); + BOOST_TEST(69 == deq.at(2)); + BOOST_TEST(72 == deq.at(3)); + } + { + value_type v{42, 54, 69, 72}; + const std::list lst = toml::get>(std::move(v)); + std::list::const_iterator iter = lst.begin(); + BOOST_TEST(42 == *(iter++)); + BOOST_TEST(54 == *(iter++)); + BOOST_TEST(69 == *(iter++)); + BOOST_TEST(72 == *(iter++)); + } + { + value_type v{42, 54, 69, 72}; + std::array ary = toml::get>(std::move(v)); + BOOST_TEST(static_cast(42) == ary.at(0)); + BOOST_TEST(static_cast(54) == ary.at(1)); + BOOST_TEST(static_cast(69) == ary.at(2)); + BOOST_TEST(static_cast(72) == ary.at(3)); + } + { + value_type v{42, 54, 69, 72}; + std::tuple tpl = + toml::get>(std::move(v)); + BOOST_TEST(static_cast(42) == std::get<0>(tpl)); + BOOST_TEST(static_cast(54) == std::get<1>(tpl)); + BOOST_TEST(static_cast(69) == std::get<2>(tpl)); + BOOST_TEST(static_cast(72) == std::get<3>(tpl)); + } } BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_toml_array_of_array, value_type, test_value_types) { - const value_type v1{42, 54, 69, 72}; - const value_type v2{"foo", "bar", "baz"}; - const value_type v{v1, v2}; + { + const value_type v1{42, 54, 69, 72}; + const value_type v2{"foo", "bar", "baz"}; + const value_type v{v1, v2}; - std::pair, std::vector> p = - toml::get, std::vector>>(v); + std::pair, std::vector> p = + toml::get, std::vector>>(v); - BOOST_TEST(p.first.at(0) == 42); - BOOST_TEST(p.first.at(1) == 54); - BOOST_TEST(p.first.at(2) == 69); - BOOST_TEST(p.first.at(3) == 72); + BOOST_TEST(p.first.size() == 4u); + BOOST_TEST(p.first.at(0) == 42); + BOOST_TEST(p.first.at(1) == 54); + BOOST_TEST(p.first.at(2) == 69); + BOOST_TEST(p.first.at(3) == 72); - BOOST_TEST(p.second.at(0) == "foo"); - BOOST_TEST(p.second.at(1) == "bar"); - BOOST_TEST(p.second.at(2) == "baz"); + BOOST_TEST(p.second.size() == 3u); + BOOST_TEST(p.second.at(0) == "foo"); + BOOST_TEST(p.second.at(1) == "bar"); + BOOST_TEST(p.second.at(2) == "baz"); - std::tuple, std::vector> t = - toml::get, std::vector>>(v); + std::tuple, std::vector> t = + toml::get, std::vector>>(v); - BOOST_TEST(std::get<0>(t).at(0) == 42); - BOOST_TEST(std::get<0>(t).at(1) == 54); - BOOST_TEST(std::get<0>(t).at(2) == 69); - BOOST_TEST(std::get<0>(t).at(3) == 72); + BOOST_TEST(std::get<0>(t).at(0) == 42); + BOOST_TEST(std::get<0>(t).at(1) == 54); + BOOST_TEST(std::get<0>(t).at(2) == 69); + BOOST_TEST(std::get<0>(t).at(3) == 72); - BOOST_TEST(std::get<1>(t).at(0) == "foo"); - BOOST_TEST(std::get<1>(t).at(1) == "bar"); - BOOST_TEST(std::get<1>(t).at(2) == "baz"); + BOOST_TEST(std::get<1>(t).at(0) == "foo"); + BOOST_TEST(std::get<1>(t).at(1) == "bar"); + BOOST_TEST(std::get<1>(t).at(2) == "baz"); + } + { + const value_type v1{42, 54, 69, 72}; + const value_type v2{"foo", "bar", "baz"}; + value_type v{v1, v2}; + + std::pair, std::vector> p = + toml::get, std::vector>>(std::move(v)); + + BOOST_TEST(p.first.size() == 4u); + BOOST_TEST(p.first.at(0) == 42); + BOOST_TEST(p.first.at(1) == 54); + BOOST_TEST(p.first.at(2) == 69); + BOOST_TEST(p.first.at(3) == 72); + + BOOST_TEST(p.second.size() == 3u); + BOOST_TEST(p.second.at(0) == "foo"); + BOOST_TEST(p.second.at(1) == "bar"); + BOOST_TEST(p.second.at(2) == "baz"); + } } BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_toml_table, value_type, test_value_types) { - const value_type v1{ - {"key1", 1}, - {"key2", 2}, - {"key3", 3}, - {"key4", 4} - }; + { + const value_type v1{ + {"key1", 1}, + {"key2", 2}, + {"key3", 3}, + {"key4", 4} + }; + + const auto v = toml::get>(v1); + BOOST_TEST(v.at("key1") == 1); + BOOST_TEST(v.at("key2") == 2); + BOOST_TEST(v.at("key3") == 3); + BOOST_TEST(v.at("key4") == 4); + } + { + value_type v1{ + {"key1", 1}, + {"key2", 2}, + {"key3", 3}, + {"key4", 4} + }; + const auto v = toml::get>(std::move(v1)); + BOOST_TEST(v.at("key1") == 1); + BOOST_TEST(v.at("key2") == 2); + BOOST_TEST(v.at("key3") == 3); + BOOST_TEST(v.at("key4") == 4); + } - const auto v = toml::get>(v1); - BOOST_TEST(v.at("key1") == 1); - BOOST_TEST(v.at("key2") == 2); - BOOST_TEST(v.at("key3") == 3); - BOOST_TEST(v.at("key4") == 4); } BOOST_AUTO_TEST_CASE_TEMPLATE(test_get_toml_local_date, value_type, test_value_types)