#define BOOST_TEST_MODULE "test_to_toml" #ifdef UNITTEST_FRAMEWORK_LIBRARY_EXIST #include #else #define BOOST_TEST_NO_LIB #include #endif #include #include #include BOOST_AUTO_TEST_CASE(test_value_boolean) { toml::value v1 = toml::to_toml(true); toml::value v2 = toml::to_toml(false); BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean); BOOST_CHECK_EQUAL(v2.type(), toml::value_t::Boolean); BOOST_CHECK(v1.is(toml::value_t::Boolean)); BOOST_CHECK(v2.is(toml::value_t::Boolean)); BOOST_CHECK(v1.is()); BOOST_CHECK(v2.is()); BOOST_CHECK_EQUAL(v1.cast(), true); BOOST_CHECK_EQUAL(v2.cast(), false); } BOOST_AUTO_TEST_CASE(test_value_integer) { toml::value v1 = toml::to_toml(-42); toml::value v2 = toml::to_toml(42u); BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Integer); BOOST_CHECK_EQUAL(v2.type(), toml::value_t::Integer); BOOST_CHECK(v1.is(toml::value_t::Integer)); BOOST_CHECK(v2.is(toml::value_t::Integer)); BOOST_CHECK(v1.is()); BOOST_CHECK(v2.is()); BOOST_CHECK_EQUAL(v1.cast(), -42); BOOST_CHECK_EQUAL(v2.cast(), 42u); } BOOST_AUTO_TEST_CASE(test_value_float) { toml::value v1 = toml::to_toml(3.14); toml::value v2 = toml::to_toml(3.14f); BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Float); BOOST_CHECK_EQUAL(v2.type(), toml::value_t::Float); BOOST_CHECK(v1.is(toml::value_t::Float)); BOOST_CHECK(v2.is(toml::value_t::Float)); BOOST_CHECK(v1.is()); BOOST_CHECK(v2.is()); BOOST_CHECK_EQUAL(v1.cast(), 3.14); BOOST_CHECK_CLOSE_FRACTION(v2.cast(), 3.14, 1e-2); } BOOST_AUTO_TEST_CASE(test_value_string) { toml::value v1 = toml::to_toml(std::string("foo")); toml::value v2 = toml::to_toml(std::string("foo"), toml::string_t::literal); toml::value v3 = toml::to_toml("foo"); BOOST_CHECK_EQUAL(v1.type(), toml::value_t::String); BOOST_CHECK_EQUAL(v2.type(), toml::value_t::String); BOOST_CHECK_EQUAL(v3.type(), toml::value_t::String); BOOST_CHECK(v1.is(toml::value_t::String)); BOOST_CHECK(v2.is(toml::value_t::String)); BOOST_CHECK(v3.is(toml::value_t::String)); BOOST_CHECK(v1.is()); BOOST_CHECK(v2.is()); BOOST_CHECK(v3.is()); BOOST_CHECK_EQUAL(v1.cast(), "foo"); BOOST_CHECK_EQUAL(v2.cast(), "foo"); BOOST_CHECK_EQUAL(v3.cast(), "foo"); } BOOST_AUTO_TEST_CASE(test_value_local_date) { toml::value v1 = toml::to_toml(toml::local_date(2018, toml::month_t::Jan, 31)); BOOST_CHECK_EQUAL(v1.type(), toml::value_t::LocalDate); BOOST_CHECK(v1.is(toml::value_t::LocalDate)); BOOST_CHECK(v1.is()); BOOST_CHECK_EQUAL(v1.cast(), toml::local_date(2018, toml::month_t::Jan, 31)); } BOOST_AUTO_TEST_CASE(test_value_local_time) { toml::value v1 = toml::to_toml(toml::local_time(12, 30, 45)); toml::value v2 = toml::to_toml(std::chrono::hours(12) + std::chrono::minutes(30) + std::chrono::seconds(45)); BOOST_CHECK_EQUAL(v1.type(), toml::value_t::LocalTime); BOOST_CHECK_EQUAL(v2.type(), toml::value_t::LocalTime); BOOST_CHECK(v1.is(toml::value_t::LocalTime)); BOOST_CHECK(v2.is(toml::value_t::LocalTime)); BOOST_CHECK(v1.is()); BOOST_CHECK(v2.is()); BOOST_CHECK_EQUAL(v1.cast(), toml::local_time(12, 30, 45)); BOOST_CHECK_EQUAL(v2.cast(), toml::local_time(12, 30, 45)); BOOST_CHECK_EQUAL(v1.cast(), v2.cast()); } BOOST_AUTO_TEST_CASE(test_value_local_datetime) { toml::value v1 = toml::to_toml(toml::local_datetime( toml::local_date(2018, toml::month_t::Jan, 31), toml::local_time(12, 30, 45) )); BOOST_CHECK_EQUAL(v1.type(), toml::value_t::LocalDatetime); BOOST_CHECK(v1.is(toml::value_t::LocalDatetime)); BOOST_CHECK(v1.is()); BOOST_CHECK_EQUAL(v1.cast(), toml::local_datetime( toml::local_date(2018, toml::month_t::Jan, 31), toml::local_time(12, 30, 45))); } BOOST_AUTO_TEST_CASE(test_value_offset_datetime) { toml::value v1 = toml::to_toml(toml::offset_datetime( toml::local_date(2018, toml::month_t::Jan, 31), toml::local_time(12, 30, 45), toml::time_offset(9, 0) )); BOOST_CHECK_EQUAL(v1.type(), toml::value_t::OffsetDatetime); BOOST_CHECK(v1.is(toml::value_t::OffsetDatetime)); BOOST_CHECK(v1.is()); BOOST_CHECK_EQUAL(v1.cast(), toml::offset_datetime( toml::local_date(2018, toml::month_t::Jan, 31), toml::local_time(12, 30, 45), toml::time_offset(9, 0) )); } BOOST_AUTO_TEST_CASE(test_value_array) { std::vector v{1,2,3,4,5}; toml::value v1 = toml::to_toml(v); toml::value v2 = toml::to_toml(6,7,8,9,0); BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Array); BOOST_CHECK(v1.is(toml::value_t::Array)); BOOST_CHECK(v1.is()); BOOST_CHECK_EQUAL(v2.type(), toml::value_t::Array); BOOST_CHECK(v2.is(toml::value_t::Array)); BOOST_CHECK(v2.is()); BOOST_CHECK_EQUAL(v1.cast().at(0).cast(), 1); BOOST_CHECK_EQUAL(v1.cast().at(1).cast(), 2); BOOST_CHECK_EQUAL(v1.cast().at(2).cast(), 3); BOOST_CHECK_EQUAL(v1.cast().at(3).cast(), 4); BOOST_CHECK_EQUAL(v1.cast().at(4).cast(), 5); BOOST_CHECK_EQUAL(v2.cast().at(0).cast(), 6); BOOST_CHECK_EQUAL(v2.cast().at(1).cast(), 7); BOOST_CHECK_EQUAL(v2.cast().at(2).cast(), 8); BOOST_CHECK_EQUAL(v2.cast().at(3).cast(), 9); BOOST_CHECK_EQUAL(v2.cast().at(4).cast(), 0); } BOOST_AUTO_TEST_CASE(test_value_table) { toml::value v1 = toml::to_toml({{"foo", 42}, {"bar", 3.14}, {"baz", "qux"}}); BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Table); BOOST_CHECK(v1.is(toml::value_t::Table)); BOOST_CHECK(v1.is()); BOOST_CHECK_EQUAL(v1.cast().at("foo").cast(), 42); BOOST_CHECK_EQUAL(v1.cast().at("bar").cast(), 3.14); BOOST_CHECK_EQUAL(v1.cast().at("baz").cast().str, "qux"); }