From 84ac1d10f35aa7a1779f0072b7dab812cca3ad79 Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Sat, 27 Apr 2019 16:22:50 +0900 Subject: [PATCH] test: add test for toml::value::as_something --- tests/test_value.cpp | 150 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 143 insertions(+), 7 deletions(-) diff --git a/tests/test_value.cpp b/tests/test_value.cpp index a0b38e4..691e521 100644 --- a/tests/test_value.cpp +++ b/tests/test_value.cpp @@ -25,6 +25,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean) BOOST_CHECK_EQUAL(v1.cast(), true); BOOST_CHECK_EQUAL(v2.cast(), false); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); + BOOST_CHECK_EQUAL(v2.as_boolean(), false); v1 = false; v2 = true; @@ -40,6 +42,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean) BOOST_CHECK_EQUAL(v1.cast(), false); BOOST_CHECK_EQUAL(v2.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), false); + BOOST_CHECK_EQUAL(v2.as_boolean(), true); toml::value v3(v1); toml::value v4(v2); @@ -57,6 +61,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean) BOOST_CHECK_EQUAL(v3.cast(), false); BOOST_CHECK_EQUAL(v4.cast(), 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)); @@ -72,6 +78,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean) BOOST_CHECK_EQUAL(v5.cast(), false); BOOST_CHECK_EQUAL(v6.cast(), true); + BOOST_CHECK_EQUAL(v5.as_boolean(), false); + BOOST_CHECK_EQUAL(v6.as_boolean(), true); v1 = 42; v2 = 3.14; @@ -87,6 +95,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean) BOOST_CHECK_EQUAL(v1.cast(), 42); BOOST_CHECK_EQUAL(v2.cast(), 3.14); + BOOST_CHECK_EQUAL(v1.as_integer(), 42); + BOOST_CHECK_EQUAL(v2.as_floating(), 3.14); } BOOST_AUTO_TEST_CASE(test_value_integer) @@ -105,6 +115,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer) BOOST_CHECK_EQUAL(v1.cast(), -42); BOOST_CHECK_EQUAL(v2.cast(), 42u); + BOOST_CHECK_EQUAL(v1.as_integer(), -42); + BOOST_CHECK_EQUAL(v2.as_integer(), 42u); v1 = 54; v2 = -54; @@ -120,6 +132,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer) BOOST_CHECK_EQUAL(v1.cast(), 54); BOOST_CHECK_EQUAL(v2.cast(), -54); + BOOST_CHECK_EQUAL(v1.as_integer(), 54); + BOOST_CHECK_EQUAL(v2.as_integer(), -54); toml::value v3(v1); toml::value v4(v2); @@ -137,6 +151,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer) BOOST_CHECK_EQUAL(v3.cast(), 54); BOOST_CHECK_EQUAL(v4.cast(), -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)); @@ -152,6 +168,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer) BOOST_CHECK_EQUAL(v5.cast(), 54); BOOST_CHECK_EQUAL(v6.cast(), -54); + BOOST_CHECK_EQUAL(v5.as_integer(), 54); + BOOST_CHECK_EQUAL(v6.as_integer(), -54); v1 = true; v2 = false; @@ -167,6 +185,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer) BOOST_CHECK_EQUAL(v1.cast(), true); BOOST_CHECK_EQUAL(v2.cast(), false); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); + BOOST_CHECK_EQUAL(v2.as_boolean(), false); } BOOST_AUTO_TEST_CASE(test_value_float) @@ -183,8 +203,10 @@ BOOST_AUTO_TEST_CASE(test_value_float) BOOST_CHECK(v1.is_float()); BOOST_CHECK(v2.is_float()); - BOOST_CHECK_EQUAL(v1.cast(), 3.14); + BOOST_CHECK_EQUAL (v1.cast(), 3.14); BOOST_CHECK_CLOSE_FRACTION(v2.cast(), 3.14, 1e-2); + BOOST_CHECK_EQUAL (v1.as_floating(), 3.14); + BOOST_CHECK_CLOSE_FRACTION(v2.as_floating(), 3.14, 1e-2); v1 = 2.718f; v2 = 2.718; @@ -199,7 +221,9 @@ BOOST_AUTO_TEST_CASE(test_value_float) BOOST_CHECK(v2.is_float()); BOOST_CHECK_CLOSE_FRACTION(v1.cast(), 2.718, 1e-3); - BOOST_CHECK_EQUAL(v2.cast(), 2.718); + BOOST_CHECK_EQUAL (v2.cast(), 2.718); + BOOST_CHECK_CLOSE_FRACTION(v1.as_floating(), 2.718, 1e-3); + BOOST_CHECK_EQUAL (v2.as_floating(), 2.718); toml::value v3(v1); toml::value v4(v2); @@ -216,7 +240,9 @@ BOOST_AUTO_TEST_CASE(test_value_float) BOOST_CHECK(v4.is_float()); BOOST_CHECK_CLOSE_FRACTION(v3.cast(), 2.718, 1e-3); - BOOST_CHECK_EQUAL(v4.cast(), 2.718); + BOOST_CHECK_EQUAL (v4.cast(), 2.718); + BOOST_CHECK_CLOSE_FRACTION(v3.as_floating(), 2.718, 1e-3); + BOOST_CHECK_EQUAL (v4.as_floating(), 2.718); toml::value v5(std::move(v1)); toml::value v6(std::move(v2)); @@ -231,7 +257,9 @@ BOOST_AUTO_TEST_CASE(test_value_float) BOOST_CHECK(v6.is_float()); BOOST_CHECK_CLOSE_FRACTION(v5.cast(), 2.718, 1e-3); - BOOST_CHECK_EQUAL(v6.cast(), 2.718); + BOOST_CHECK_EQUAL (v6.cast(), 2.718); + BOOST_CHECK_CLOSE_FRACTION(v5.as_floating(), 2.718, 1e-3); + BOOST_CHECK_EQUAL (v6.as_floating(), 2.718); v1 = true; v2 = false; @@ -247,6 +275,8 @@ BOOST_AUTO_TEST_CASE(test_value_float) BOOST_CHECK_EQUAL(v1.cast(), true); BOOST_CHECK_EQUAL(v2.cast(), false); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); + BOOST_CHECK_EQUAL(v2.as_boolean(), false); } BOOST_AUTO_TEST_CASE(test_value_string) @@ -271,6 +301,10 @@ BOOST_AUTO_TEST_CASE(test_value_string) BOOST_CHECK_EQUAL(v1.cast(), "foo"); BOOST_CHECK_EQUAL(v2.cast(), "foo"); BOOST_CHECK_EQUAL(v3.cast(), "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"; @@ -289,6 +323,10 @@ BOOST_AUTO_TEST_CASE(test_value_string) BOOST_CHECK_EQUAL(v1.cast(), "bar"); BOOST_CHECK_EQUAL(v2.cast(), "bar"); BOOST_CHECK_EQUAL(v3.cast(), "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); @@ -313,6 +351,10 @@ BOOST_AUTO_TEST_CASE(test_value_string) BOOST_CHECK_EQUAL(v4.cast(), "bar"); BOOST_CHECK_EQUAL(v5.cast(), "bar"); BOOST_CHECK_EQUAL(v6.cast(), "bar"); + BOOST_CHECK_EQUAL(v4.as_string(), "bar"); + BOOST_CHECK_EQUAL(v5.as_string(), "bar"); + BOOST_CHECK_EQUAL(v6.as_string(), "bar"); + v4.cast().str.at(2) = 'z'; v5.cast().str.at(2) = 'z'; @@ -331,9 +373,9 @@ BOOST_AUTO_TEST_CASE(test_value_string) BOOST_CHECK(v5.is_string()); BOOST_CHECK(v6.is_string()); - BOOST_CHECK_EQUAL(v4.cast(), "baz"); - BOOST_CHECK_EQUAL(v5.cast(), "baz"); - BOOST_CHECK_EQUAL(v6.cast(), "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; @@ -355,6 +397,9 @@ BOOST_AUTO_TEST_CASE(test_value_string) BOOST_CHECK_EQUAL(v1.cast(), true); BOOST_CHECK_EQUAL(v2.cast(), true); BOOST_CHECK_EQUAL(v3.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); + BOOST_CHECK_EQUAL(v2.as_boolean(), true); + BOOST_CHECK_EQUAL(v3.as_boolean(), true); } BOOST_AUTO_TEST_CASE(test_value_local_date) @@ -368,6 +413,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_date) BOOST_CHECK_EQUAL(v1.cast(), 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); @@ -378,6 +425,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_date) BOOST_CHECK_EQUAL(v1.cast(), 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); @@ -389,6 +438,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_date) BOOST_CHECK_EQUAL(v2.cast(), 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); @@ -396,6 +447,7 @@ BOOST_AUTO_TEST_CASE(test_value_local_date) BOOST_CHECK(v1.is()); BOOST_CHECK(v1.is_boolean()); BOOST_CHECK_EQUAL(v1.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); } BOOST_AUTO_TEST_CASE(test_value_local_time) @@ -415,10 +467,18 @@ BOOST_AUTO_TEST_CASE(test_value_local_time) BOOST_CHECK_EQUAL(v1.cast(), 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::local_time(12, 30, 45)); + BOOST_CHECK_EQUAL(v2.as_local_time(), + toml::local_time(12, 30, 45)); + BOOST_CHECK_EQUAL(v1.cast(), v2.cast()); + BOOST_CHECK_EQUAL(v1.as_local_time(), + v2.as_local_time()); v1 = toml::local_time(1, 30, 0, /*ms*/ 100, /*us*/ 0); @@ -428,6 +488,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_time) BOOST_CHECK(v1.is_local_time()); BOOST_CHECK_EQUAL(v1.cast(), 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); @@ -439,6 +501,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_time) BOOST_CHECK_EQUAL(v3.cast(), 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); @@ -446,6 +510,7 @@ BOOST_AUTO_TEST_CASE(test_value_local_time) BOOST_CHECK(v1.is()); BOOST_CHECK(v1.is_boolean()); BOOST_CHECK_EQUAL(v1.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); } BOOST_AUTO_TEST_CASE(test_value_local_datetime) @@ -464,6 +529,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), @@ -478,6 +547,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); @@ -491,6 +564,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); @@ -498,6 +576,7 @@ BOOST_AUTO_TEST_CASE(test_value_local_datetime) BOOST_CHECK(v1.is()); BOOST_CHECK(v1.is_boolean()); BOOST_CHECK_EQUAL(v1.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); } BOOST_AUTO_TEST_CASE(test_value_offset_datetime) @@ -519,6 +598,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), @@ -535,6 +620,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); @@ -549,12 +640,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()); BOOST_CHECK(v1.is_boolean()); BOOST_CHECK_EQUAL(v1.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); } BOOST_AUTO_TEST_CASE(test_value_array) @@ -578,6 +676,12 @@ BOOST_AUTO_TEST_CASE(test_value_array) BOOST_CHECK_EQUAL(v1.cast().at(2).cast(), 3); BOOST_CHECK_EQUAL(v1.cast().at(3).cast(), 4); BOOST_CHECK_EQUAL(v1.cast().at(4).cast(), 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().at(0).cast(), 6); BOOST_CHECK_EQUAL(v2.cast().at(1).cast(), 7); @@ -603,12 +707,24 @@ BOOST_AUTO_TEST_CASE(test_value_array) BOOST_CHECK_EQUAL(v1.cast().at(2).cast(), 8); BOOST_CHECK_EQUAL(v1.cast().at(3).cast(), 9); BOOST_CHECK_EQUAL(v1.cast().at(4).cast(), 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().at(0).cast(), 1); BOOST_CHECK_EQUAL(v2.cast().at(1).cast(), 2); BOOST_CHECK_EQUAL(v2.cast().at(2).cast(), 3); BOOST_CHECK_EQUAL(v2.cast().at(3).cast(), 4); BOOST_CHECK_EQUAL(v2.cast().at(4).cast(), 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); @@ -623,6 +739,12 @@ BOOST_AUTO_TEST_CASE(test_value_array) BOOST_CHECK_EQUAL(v3.cast().at(2).cast(), 8); BOOST_CHECK_EQUAL(v3.cast().at(3).cast(), 9); BOOST_CHECK_EQUAL(v3.cast().at(4).cast(), 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); @@ -630,6 +752,7 @@ BOOST_AUTO_TEST_CASE(test_value_array) BOOST_CHECK(v1.is()); BOOST_CHECK(v1.is_boolean()); BOOST_CHECK_EQUAL(v1.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); } BOOST_AUTO_TEST_CASE(test_value_table) @@ -644,6 +767,10 @@ BOOST_AUTO_TEST_CASE(test_value_table) BOOST_CHECK_EQUAL(v1.cast().at("foo").cast(), 42); BOOST_CHECK_EQUAL(v1.cast().at("bar").cast(), 3.14); BOOST_CHECK_EQUAL(v1.cast().at("baz").cast().str, "qux"); + BOOST_CHECK_EQUAL(v1.as_table().at("foo").as_integer(), 42); + BOOST_CHECK_EQUAL(v1.as_table().at("bar").as_floating(), 3.14); + BOOST_CHECK_EQUAL(v1.as_table().at("baz").as_string().str, "qux"); + v1 = toml::table{{"foo", 2.71}, {"bar", 54}, {"baz", "quux"}}; @@ -655,6 +782,10 @@ BOOST_AUTO_TEST_CASE(test_value_table) BOOST_CHECK_EQUAL(v1.cast().at("foo").cast(), 2.71); BOOST_CHECK_EQUAL(v1.cast().at("bar").cast(), 54); BOOST_CHECK_EQUAL(v1.cast().at("baz").cast().str, "quux"); + BOOST_CHECK_EQUAL(v1.as_table().at("foo").as_floating(), 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); @@ -667,6 +798,10 @@ BOOST_AUTO_TEST_CASE(test_value_table) BOOST_CHECK_EQUAL(v3.cast().at("foo").cast(), 2.71); BOOST_CHECK_EQUAL(v3.cast().at("bar").cast(), 54); BOOST_CHECK_EQUAL(v3.cast().at("baz").cast().str, "quux"); + BOOST_CHECK_EQUAL(v3.as_table().at("foo").as_floating(), 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); @@ -674,6 +809,7 @@ BOOST_AUTO_TEST_CASE(test_value_table) BOOST_CHECK(v1.is()); BOOST_CHECK(v1.is_boolean()); BOOST_CHECK_EQUAL(v1.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); } BOOST_AUTO_TEST_CASE(test_value_empty)