#include #include #include using namespace dce::discord; TEST(Snowflake, DoesntDefaultConstruct) { auto const x = std::is_default_constructible_v; ASSERT_FALSE(x); } TEST(Snowflake, DoesntParseFromEmptyInput) { auto s = Snowflake::parse(""); ASSERT_FALSE(s.has_value()); ASSERT_TRUE(s.error().generic_parse_error().source.empty()); ASSERT_EQ(s.error().generic_parse_error().offset, 0); ASSERT_TRUE(s.error().is()); } TEST(Snowflake, DoesntParseFromInvalidInput) { { static auto const source = "asd123"; auto s = Snowflake::parse(source); ASSERT_FALSE(s.has_value()); ASSERT_EQ(s.error().generic_parse_error().source, source); ASSERT_EQ(s.error().generic_parse_error().offset, 0); ASSERT_TRUE(s.error().is()); } { static auto const source = "123asd"; auto s = Snowflake::parse(source); ASSERT_FALSE(s.has_value()); ASSERT_EQ(s.error().generic_parse_error().source, source); ASSERT_EQ(s.error().generic_parse_error().offset, 2); ASSERT_TRUE(s.error().is()); } } TEST(Snowflake, ParsesProperU64) { { static auto const source = "327036485033365851"; auto s = Snowflake::parse(source); ASSERT_TRUE(s.has_value()) << s.error(); } { static auto const source = "912554373094252554"; auto s = Snowflake::parse(source); ASSERT_TRUE(s.has_value()) << s.error(); } } TEST(Snowflake, StringifiesProperly) { static auto const source = "327036485033365851"; auto s = Snowflake::parse(source); ASSERT_TRUE(s.has_value()) << s.error(); ASSERT_EQ(s->string(), source); ASSERT_EQ(fmt::format("{}", *s), source); } TEST(Snowflake, DoesntParseTooShortValues) { { static auto const source = std::string_view("32703648503336585"); auto s = Snowflake::parse(source); ASSERT_FALSE(s.has_value()); ASSERT_EQ(s.error().generic_parse_error().offset, source.size() - 1); ASSERT_TRUE(s.error().is()); ASSERT_TRUE(s.error().as()->reason == SPE_InvalidRange::Reason::TooSmall); } } TEST(Snowflake, DoesntParseTooLongValues) { { static auto const source = std::string_view("32703648503336585123"); auto s = Snowflake::parse(source); ASSERT_FALSE(s.has_value()); ASSERT_EQ(s.error().generic_parse_error().offset, source.size() - 1); ASSERT_TRUE(s.error().as()->reason == SPE_InvalidRange::Reason::TooBig); } }