#include <fstream> #include <iostream> #include <string> #include "configuration.h" #include <cassert> int main(int, char**) { std::fstream fs; fs.open("smolbote.cfg", std::fstream::in); assert(fs.is_open()); { auto value_map = std::make_unique<Configuration, std::initializer_list<std::pair<std::string, conf_value_t>>>({ { "test", std::string("unknown") }, { "integer-1", 20 }, { "integer-2", 30 } }); value_map->read(fs); Configuration::move_global(std::move(value_map)); fs.close(); } { Configuration g; assert(g.value<std::string>("test") == "value"); assert(g.value<std::string>("plugins.path") == "/usr/local/lib/smolbote/plugins"); assert(g.value<int>("integer-1") == 20); assert(g.value<int>("integer-2") == 22); } /* { const Configuration conf(std::move(value_map)); assert(conf.value<std::string>("test") == "value"); assert(conf.value<std::string>("plugins.path") == "/usr/local/lib/smolbote/plugins"); assert(conf.value<int>("integer-1") == 20); assert(conf.value<int>("integer-2") == 22); } */ // Configuration is now destroyed // This should be a compiler warning //const Configuration c(std::move(value_map)); //assert(c.value<std::string>("test") == "value"); // This should be a compiler warning and runtime error //assert(value_map.value<std::string>("test").value() == "value"); return 0; }