#include "catch.hpp"

#include <iterator>

#include <osmium/util/options.hpp>

TEST_CASE("Options") {

SECTION("set_simple") {
    osmium::util::Options o;
    o.set("foo", "bar");
    REQUIRE("bar" == o.get("foo"));
    REQUIRE("" == o.get("empty"));
    REQUIRE("default" == o.get("empty", "default"));
    REQUIRE(!o.is_true("foo"));
    REQUIRE(!o.is_true("empty"));
    REQUIRE(1 == o.size());
}

SECTION("set_from_bool") {
    osmium::util::Options o;
    o.set("t", true);
    o.set("f", false);
    REQUIRE("true" == o.get("t"));
    REQUIRE("false" == o.get("f"));
    REQUIRE("" == o.get("empty"));
    REQUIRE(o.is_true("t"));
    REQUIRE(!o.is_true("f"));
    REQUIRE(2 == o.size());
}

SECTION("set_from_single_string_with_equals") {
    osmium::util::Options o;
    o.set("foo=bar");
    REQUIRE("bar" == o.get("foo"));
    REQUIRE(1 == o.size());
}

SECTION("set_from_single_string_without_equals") {
    osmium::util::Options o;
    o.set("foo");
    REQUIRE("true" == o.get("foo"));
    REQUIRE(o.is_true("foo"));
    REQUIRE(1 == o.size());
}

}