File: test_types.cpp

package info (click to toggle)
toml11 4.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,464 kB
  • sloc: cpp: 38,446; makefile: 8; sh: 5
file content (137 lines) | stat: -rw-r--r-- 10,357 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include <doctest/doctest.h>

#include <toml11/types.hpp>

TEST_CASE("testing value_t to string")
{
    CHECK_EQ(toml::to_string(toml::value_t::boolean        ), "boolean");
    CHECK_EQ(toml::to_string(toml::value_t::integer        ), "integer");
    CHECK_EQ(toml::to_string(toml::value_t::floating       ), "floating");
    CHECK_EQ(toml::to_string(toml::value_t::string         ), "string");
    CHECK_EQ(toml::to_string(toml::value_t::offset_datetime), "offset_datetime");
    CHECK_EQ(toml::to_string(toml::value_t::local_datetime ), "local_datetime");
    CHECK_EQ(toml::to_string(toml::value_t::local_date     ), "local_date");
    CHECK_EQ(toml::to_string(toml::value_t::local_time     ), "local_time");
    CHECK_EQ(toml::to_string(toml::value_t::array          ), "array");
    CHECK_EQ(toml::to_string(toml::value_t::table          ), "table");


    {std::ostringstream oss; oss << toml::value_t::boolean        ; CHECK_EQ(oss.str(), "boolean"        );}
    {std::ostringstream oss; oss << toml::value_t::integer        ; CHECK_EQ(oss.str(), "integer"        );}
    {std::ostringstream oss; oss << toml::value_t::floating       ; CHECK_EQ(oss.str(), "floating"       );}
    {std::ostringstream oss; oss << toml::value_t::string         ; CHECK_EQ(oss.str(), "string"         );}
    {std::ostringstream oss; oss << toml::value_t::offset_datetime; CHECK_EQ(oss.str(), "offset_datetime");}
    {std::ostringstream oss; oss << toml::value_t::local_datetime ; CHECK_EQ(oss.str(), "local_datetime" );}
    {std::ostringstream oss; oss << toml::value_t::local_date     ; CHECK_EQ(oss.str(), "local_date"     );}
    {std::ostringstream oss; oss << toml::value_t::local_time     ; CHECK_EQ(oss.str(), "local_time"     );}
    {std::ostringstream oss; oss << toml::value_t::array          ; CHECK_EQ(oss.str(), "array"          );}
    {std::ostringstream oss; oss << toml::value_t::table          ; CHECK_EQ(oss.str(), "table"          );}
}

#include <toml11/value.hpp>

TEST_CASE("testing type_to_enum")
{
    using value_type           = toml::value;
    using boolean_type         = typename value_type::boolean_type        ;
    using integer_type         = typename value_type::integer_type        ;
    using floating_type        = typename value_type::floating_type       ;
    using string_type          = typename value_type::string_type         ;
    using local_time_type      = typename value_type::local_time_type     ;
    using local_date_type      = typename value_type::local_date_type     ;
    using local_datetime_type  = typename value_type::local_datetime_type ;
    using offset_datetime_type = typename value_type::offset_datetime_type;
    using array_type           = typename value_type::array_type          ;
    using table_type           = typename value_type::table_type          ;

    CHECK_EQ((toml::detail::type_to_enum<boolean_type        , value_type>::value), toml::value_t::boolean        );
    CHECK_EQ((toml::detail::type_to_enum<integer_type        , value_type>::value), toml::value_t::integer        );
    CHECK_EQ((toml::detail::type_to_enum<floating_type       , value_type>::value), toml::value_t::floating       );
    CHECK_EQ((toml::detail::type_to_enum<string_type         , value_type>::value), toml::value_t::string         );
    CHECK_EQ((toml::detail::type_to_enum<local_time_type     , value_type>::value), toml::value_t::local_time     );
    CHECK_EQ((toml::detail::type_to_enum<local_date_type     , value_type>::value), toml::value_t::local_date     );
    CHECK_EQ((toml::detail::type_to_enum<local_datetime_type , value_type>::value), toml::value_t::local_datetime );
    CHECK_EQ((toml::detail::type_to_enum<offset_datetime_type, value_type>::value), toml::value_t::offset_datetime);
    CHECK_EQ((toml::detail::type_to_enum<array_type          , value_type>::value), toml::value_t::array          );
    CHECK_EQ((toml::detail::type_to_enum<table_type          , value_type>::value), toml::value_t::table          );
}

TEST_CASE("testing enum_to_type")
{
    using value_type           = toml::value;
    using boolean_type         = typename value_type::boolean_type        ;
    using integer_type         = typename value_type::integer_type        ;
    using floating_type        = typename value_type::floating_type       ;
    using string_type          = typename value_type::string_type         ;
    using local_time_type      = typename value_type::local_time_type     ;
    using local_date_type      = typename value_type::local_date_type     ;
    using local_datetime_type  = typename value_type::local_datetime_type ;
    using offset_datetime_type = typename value_type::offset_datetime_type;
    using array_type           = typename value_type::array_type          ;
    using table_type           = typename value_type::table_type          ;

    CHECK_UNARY(std::is_same<typename toml::detail::enum_to_type<toml::value_t::boolean        , value_type>::type, boolean_type        >::value);
    CHECK_UNARY(std::is_same<typename toml::detail::enum_to_type<toml::value_t::integer        , value_type>::type, integer_type        >::value);
    CHECK_UNARY(std::is_same<typename toml::detail::enum_to_type<toml::value_t::floating       , value_type>::type, floating_type       >::value);
    CHECK_UNARY(std::is_same<typename toml::detail::enum_to_type<toml::value_t::string         , value_type>::type, string_type         >::value);
    CHECK_UNARY(std::is_same<typename toml::detail::enum_to_type<toml::value_t::local_time     , value_type>::type, local_time_type     >::value);
    CHECK_UNARY(std::is_same<typename toml::detail::enum_to_type<toml::value_t::local_date     , value_type>::type, local_date_type     >::value);
    CHECK_UNARY(std::is_same<typename toml::detail::enum_to_type<toml::value_t::local_datetime , value_type>::type, local_datetime_type >::value);
    CHECK_UNARY(std::is_same<typename toml::detail::enum_to_type<toml::value_t::offset_datetime, value_type>::type, offset_datetime_type>::value);
    CHECK_UNARY(std::is_same<typename toml::detail::enum_to_type<toml::value_t::array          , value_type>::type, array_type          >::value);
    CHECK_UNARY(std::is_same<typename toml::detail::enum_to_type<toml::value_t::table          , value_type>::type, table_type          >::value);
}

TEST_CASE("testing is_exact_toml_type")
{
    using value_type           = toml::value;
    using boolean_type         = typename value_type::boolean_type        ;
    using integer_type         = typename value_type::integer_type        ;
    using floating_type        = typename value_type::floating_type       ;
    using string_type          = typename value_type::string_type         ;
    using local_time_type      = typename value_type::local_time_type     ;
    using local_date_type      = typename value_type::local_date_type     ;
    using local_datetime_type  = typename value_type::local_datetime_type ;
    using offset_datetime_type = typename value_type::offset_datetime_type;
    using array_type           = typename value_type::array_type          ;
    using table_type           = typename value_type::table_type          ;

    CHECK_UNARY(toml::detail::is_exact_toml_type<boolean_type        , value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<integer_type        , value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<floating_type       , value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<string_type         , value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<local_time_type     , value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<local_date_type     , value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<local_datetime_type , value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<offset_datetime_type, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<array_type          , value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<table_type          , value_type>::value);

    CHECK_UNARY(toml::detail::is_exact_toml_type<boolean_type        &, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<integer_type        &, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<floating_type       &, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<string_type         &, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<local_time_type     &, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<local_date_type     &, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<local_datetime_type &, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<offset_datetime_type&, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<array_type          &, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<table_type          &, value_type>::value);

    CHECK_UNARY(toml::detail::is_exact_toml_type<boolean_type         const&, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<integer_type         const&, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<floating_type        const&, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<string_type          const&, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<local_time_type      const&, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<local_date_type      const&, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<local_datetime_type  const&, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<offset_datetime_type const&, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<array_type           const&, value_type>::value);
    CHECK_UNARY(toml::detail::is_exact_toml_type<table_type           const&, value_type>::value);

    CHECK_UNARY_FALSE(toml::detail::is_exact_toml_type<float,                    value_type>::value);
    CHECK_UNARY_FALSE(toml::detail::is_exact_toml_type<std::int16_t,             value_type>::value);
    CHECK_UNARY_FALSE(toml::detail::is_exact_toml_type<std::vector<std::string>, value_type>::value);

}