o = options()
assert(#o == 0)
assert(o:empty())
o = o:update_bool("tst", true)
assert(#o == 1)
assert(not o:empty())
assert(o:contains("tst"))
assert(o:get_bool("tst") == true)
assert(o:get_bool("tst2", true) == true)
assert(o:get_bool("tst2") == false)
o = o:update_int("val", 10)
assert(#o == 2)
assert(o:contains("val"))
assert(o:get_int("val") == 10)
assert(o:get_int("val2", 20) == 20)
assert(o:get_int("val", 20) == 10)
assert(o:get_int("val2") == 0)
assert(o:get_int("val2", -10) == -10)
o = o:update_unsigned("x", 10)
assert(#o == 3)
assert(o:size() == 3)
print(o)
assert(o:get_unsigned("x") == 10)
assert(o:get_unsigned("y", -1) == 4294967295)
o = o:update_double("ratio", 10.2)
assert(o:contains("ratio"))
print(o:get_double("ratio"))
o = o:update_string("file", "foo")
assert(o:get_string("file") == "foo")
assert(not o:get(name("pp", "colors")))
o = o:update(name("pp", "colors"), true)
assert(o:get(name("pp", "colors")))
print(o)