File: spec_example.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 (86 lines) | stat: -rw-r--r-- 3,638 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
#include <toml.hpp>

#include <iostream>
#include <map>

#include <cassert>

int main()
{
    const auto root = toml::parse("spec_example.toml");

    // using member functions
    {
        assert(root.at("title").as_string() == "TOML Example");

        assert(root.at("owner").at("name").as_string() == "Tom Preston-Werner");

        const auto dob = root.at("owner").at("dob" ).as_offset_datetime();
        assert(dob.date  .year   ==  1979);
        assert(dob.date  .month  ==  static_cast<int>(toml::month_t::May));
        assert(dob.date  .day    ==  27);
        assert(dob.time  .hour   ==  7);
        assert(dob.time  .minute ==  32);
        assert(dob.time  .second ==  0);
        assert(dob.offset.hour   == -8);
        assert(dob.offset.minute ==  0);

        assert(root.at("database").at("enabled").as_boolean());
        assert(root.at("database").at("ports").at(0).as_integer() == 8000);
        assert(root.at("database").at("ports").at(1).as_integer() == 8001);
        assert(root.at("database").at("ports").at(2).as_integer() == 8002);
        assert(root.at("database").at("data").at(0).at(0).as_string()   == "delta");
        assert(root.at("database").at("data").at(0).at(1).as_string()   == "phi");
        assert(root.at("database").at("data").at(1).at(0).as_floating() == 3.14);
        assert(root.at("database").at("temp_targets").at("cpu" ).as_floating() == 79.5);
        assert(root.at("database").at("temp_targets").at("case").as_floating() == 72.0);

        assert(root.at("servers").at("alpha").at("ip"  ).as_string() == "10.0.0.1");
        assert(root.at("servers").at("alpha").at("role").as_string() == "frontend");
        assert(root.at("servers").at("beta" ).at("ip"  ).as_string() == "10.0.0.2");
        assert(root.at("servers").at("beta" ).at("role").as_string() == "backend");
    }

    // using toml::find
    {
        assert(toml::find<std::string>(root, "title") == "TOML Example");

        assert(toml::find<std::string>(root, "owner", "name") == "Tom Preston-Werner");

        const auto dob = toml::find<toml::offset_datetime>(root, "owner", "dob");
        assert(dob.date  .year   ==  1979);
        assert(dob.date  .month  ==  static_cast<int>(toml::month_t::May));
        assert(dob.date  .day    ==  27);
        assert(dob.time  .hour   ==  7);
        assert(dob.time  .minute ==  32);
        assert(dob.time  .second ==  0);
        assert(dob.offset.hour   == -8);
        assert(dob.offset.minute ==  0);

        assert(toml::find<bool>(root, "database", "enabled"));

        const auto ports = toml::find<std::vector<int>>(root, "database", "ports");
        assert(ports.at(0) == 8000);
        assert(ports.at(1) == 8001);
        assert(ports.at(2) == 8002);

        const auto data = toml::find<std::pair<std::vector<std::string>, std::vector<double>>>(root, "database", "data");
        assert(data.first.at(0)  == "delta");
        assert(data.first.at(1)  == "phi");
        assert(data.second.at(0) == 3.14);

        const auto temp_targets = toml::find<std::map<std::string, double>>(root, "database", "temp_targets");
        assert(temp_targets.at("cpu" ) == 79.5);
        assert(temp_targets.at("case") == 72.0);

        const auto servers = toml::find<std::map<std::string, std::map<std::string, std::string>>>(root, "servers");
        assert(servers.at("alpha").at("ip"  ) == "10.0.0.1");
        assert(servers.at("alpha").at("role") == "frontend");
        assert(servers.at("beta" ).at("ip"  ) == "10.0.0.2");
        assert(servers.at("beta" ).at("role") == "backend" );
    }

    std::cout << "ok." << std::endl;

    return 0;
}