Garbage/Tests/SimpleConf/Conversions.cpp

41 lines
1.9 KiB
C++

#include <catch2/catch_test_macros.hpp>
#include <Garbage/SimpleConf.hpp>
TEST_CASE("Check if type conversions work correctly")
{
using Required = Garbage::SimpleConf::Required;
std::filesystem::path path("TestConfigs/BasicConversions.conf");
Garbage::SimpleConf config(path);
SECTION("Basic stuff that should be correct")
{
REQUIRE(config.Get<std::string, Required>("an int") == "123456");
REQUIRE(config.Get<std::string, Required>("a float") == "3.5");
REQUIRE(config.Get<std::string, Required>("a long (8B)") == "121212121212121212");
REQUIRE(config.Get<std::string, Required>("a double") == "0.0000128");
REQUIRE(config.Get<std::int32_t>("an int") == 123456);
REQUIRE(config.Get<float>("a float") == 3.5f);
REQUIRE(config.Get<std::int64_t>("a long (8B)") == 121212121212121212);
REQUIRE(config.Get<double>("a double") == 0.0000128);
}
SECTION("Stuff that should fail to parse")
{
REQUIRE(config.Get<std::string, Required>("an incorrect char") == "256");
REQUIRE(config.Get<std::string, Required>("unsigned") == "-34");
REQUIRE(config.Get<std::string, Required>("signed, but large") == "3000000000");
REQUIRE(config.Get<std::string, Required>("mangled float") == "3.f4");
REQUIRE(config.Get<std::string, Required>("mangled float 2") == "2.4f");
using ConversionError = Garbage::SimpleConfImplementation::ConversionError;
REQUIRE_THROWS_AS(config.Get<std::uint8_t>("an incorrect char"), ConversionError);
REQUIRE_THROWS_AS(config.Get<std::uint32_t>("unsigned"), ConversionError);
REQUIRE_THROWS_AS(config.Get<std::int32_t>("signed, but large"), ConversionError);
REQUIRE_THROWS_AS(config.Get<float>("mangled float"), ConversionError);
REQUIRE_THROWS_AS(config.Get<float>("mangled float 2"), ConversionError);
}
}