From bcabdc49b31619ff9360880a948406926af36fd4 Mon Sep 17 00:00:00 2001 From: Ruben Perez Date: Sat, 24 Sep 2022 16:37:21 +0200 Subject: [PATCH] field_view accessors --- test/unit/field_view.cpp | 116 ++++++++++++++++++++++++++++++++------- 1 file changed, 96 insertions(+), 20 deletions(-) diff --git a/test/unit/field_view.cpp b/test/unit/field_view.cpp index 84908e42..9d32520d 100644 --- a/test/unit/field_view.cpp +++ b/test/unit/field_view.cpp @@ -31,6 +31,26 @@ using boost::typeindex::type_index; namespace { +// For parametrized tests +struct +{ + const char* name; + field_view field; + field_kind expected_kind; + bool is_null, is_int64, is_uint64, is_string, is_float, is_double, is_date, is_datetime, is_time; +} test_cases [] = { + // name field kind null, i64 u64 str float double date dt time + { "null", field_view(), field_kind::null, true, false, false, false, false, false, false, false, false }, + { "int64", field_view(42), field_kind::int64, false, true, false, false, false, false, false, false, false }, + { "uint64", field_view(42u), field_kind::uint64, false, false, true, false, false, false, false, false, false }, + { "string", field_view("test"), field_kind::string, false, false, false, true, false, false, false, false, false }, + { "float", field_view(4.2f), field_kind::float_, false, false, false, false, true, false, false, false, false }, + { "double", field_view(4.2), field_kind::double_, false, false, false, false, false, true, false, false, false }, + { "date", field_view(makedate(2020, 1, 1)), field_kind::date, false, false, false, false, false, false, true, false, false }, + { "datetime", field_view(makedt(2020, 1, 1)), field_kind::datetime, false, false, false, false, false, false, false, true, false }, + { "time", field_view(maket(20, 1, 1)), field_kind::time, false, false, false, false, false, false, false, false, true }, +}; + BOOST_AUTO_TEST_SUITE(test_field_view) BOOST_AUTO_TEST_SUITE(constructors) @@ -165,26 +185,6 @@ BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE(accesors) -// For parametrized tests -struct -{ - const char* name; - field_view field; - field_kind expected_kind; - bool is_null, is_int64, is_uint64, is_string, is_float, is_double, is_date, is_datetime, is_time; -} test_cases [] = { - // name field kind null, i64 u64 str float double date dt time - { "null", field_view(), field_kind::null, true, false, false, false, false, false, false, false, false }, - { "int64", field_view(42), field_kind::int64, false, true, false, false, false, false, false, false, false }, - { "uint64", field_view(42u), field_kind::uint64, false, false, true, false, false, false, false, false, false }, - { "string", field_view("test"), field_kind::string, false, false, false, true, false, false, false, false, false }, - { "float", field_view(4.2f), field_kind::float_, false, false, false, false, true, false, false, false, false }, - { "double", field_view(4.2), field_kind::double_, false, false, false, false, false, true, false, false, false }, - { "date", field_view(makedate(2020, 1, 1)), field_kind::date, false, false, false, false, false, false, true, false, false }, - { "datetime", field_view(makedt(2020, 1, 1)), field_kind::datetime, false, false, false, false, false, false, false, true, false }, - { "time", field_view(maket(20, 1, 1)), field_kind::time, false, false, false, false, false, false, false, false, true }, -}; - BOOST_AUTO_TEST_CASE(kind) { for (const auto& tc : test_cases) @@ -310,6 +310,82 @@ BOOST_AUTO_TEST_CASE(as_exceptions) } } +// Success cases (the type matches the called function) +BOOST_AUTO_TEST_CASE(int64) +{ + field_view f (-1); + BOOST_TEST_REQUIRE(f.if_int64() != nullptr); + BOOST_TEST(*f.if_int64() == -1); + BOOST_TEST(f.as_int64() == -1); + BOOST_TEST(f.get_int64() == -1); +} + +BOOST_AUTO_TEST_CASE(uint64) +{ + field_view f (42u); + BOOST_TEST_REQUIRE(f.if_uint64() != nullptr); + BOOST_TEST(*f.if_uint64() == 42u); + BOOST_TEST(f.as_uint64() == 42u); + BOOST_TEST(f.get_uint64() == 42u); +} + +BOOST_AUTO_TEST_CASE(string) +{ + field_view f ("test"); + BOOST_TEST_REQUIRE(f.if_string() != nullptr); + BOOST_TEST(*f.if_string() == "test"); + BOOST_TEST(f.as_string() == "test"); + BOOST_TEST(f.get_string() == "test"); +} + +BOOST_AUTO_TEST_CASE(float_) +{ + field_view f (4.2f); + BOOST_TEST_REQUIRE(f.if_float() != nullptr); + BOOST_TEST(*f.if_float() == 4.2f); + BOOST_TEST(f.as_float() == 4.2f); + BOOST_TEST(f.get_float() == 4.2f); +} + +BOOST_AUTO_TEST_CASE(double_) +{ + field_view f (4.2); + BOOST_TEST_REQUIRE(f.if_double() != nullptr); + BOOST_TEST(*f.if_double() == 4.2); + BOOST_TEST(f.as_double() == 4.2); + BOOST_TEST(f.get_double() == 4.2); +} + +BOOST_AUTO_TEST_CASE(date) +{ + auto d = makedate(2020, 1, 2); + field_view f (d); + BOOST_TEST_REQUIRE(f.if_date() != nullptr); + BOOST_TEST(*f.if_date() == d); + BOOST_TEST(f.as_date() == d); + BOOST_TEST(f.get_date() == d); +} + +BOOST_AUTO_TEST_CASE(datetime) +{ + auto dt = makedt(2020, 1, 2); + field_view f (dt); + BOOST_TEST_REQUIRE(f.if_datetime() != nullptr); + BOOST_TEST(*f.if_datetime() == dt); + BOOST_TEST(f.as_datetime() == dt); + BOOST_TEST(f.get_datetime() == dt); +} + +BOOST_AUTO_TEST_CASE(time) +{ + auto t = maket(2020, 1, 2); + field_view f (t); + BOOST_TEST_REQUIRE(f.if_time() != nullptr); + BOOST_TEST(*f.if_time() == t); + BOOST_TEST(f.as_time() == t); + BOOST_TEST(f.get_time() == t); +} + BOOST_AUTO_TEST_SUITE_END()