convert_ut.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include <library/cpp/testing/gtest/gtest.h>
  2. #include <library/cpp/testing/gtest_extensions/assertions.h>
  3. #include <library/cpp/yt/yson_string/convert.h>
  4. #include <thread>
  5. namespace NYT::NYson {
  6. namespace {
  7. ////////////////////////////////////////////////////////////////////////////////
  8. template <class T, class R = T, class U>
  9. void Check(const U& value)
  10. {
  11. auto str = ConvertToYsonString(static_cast<T>(value));
  12. auto anotherValue = ConvertFromYsonString<R>(str);
  13. EXPECT_EQ(static_cast<T>(value), anotherValue);
  14. }
  15. TEST(TConvertTest, Basic)
  16. {
  17. Check<i8>(13);
  18. Check<i32>(13);
  19. Check<i64>(13);
  20. Check<i8>(-13);
  21. Check<i32>(-13);
  22. Check<i64>(-13);
  23. Check<ui8>(13);
  24. Check<ui32>(13);
  25. Check<ui64>(13);
  26. Check<TString>("");
  27. Check<TString>("hello");
  28. Check<TStringBuf, TString>("hello");
  29. Check<const char*, TString>("hello");
  30. Check<float>(3.14);
  31. Check<double>(3.14);
  32. Check<bool>(true);
  33. Check<bool>(false);
  34. Check<TInstant>(TInstant::Now());
  35. Check<TDuration>(TDuration::Seconds(123));
  36. Check<TGuid>(TGuid::FromString("12345678-12345678-abcdabcd-fefefefe"));
  37. }
  38. TEST(TConvertTest, InRange)
  39. {
  40. EXPECT_EQ(ConvertFromYsonString<i16>(ConvertToYsonString(static_cast<i64>(-123))), -123);
  41. EXPECT_EQ(ConvertFromYsonString<ui16>(ConvertToYsonString(static_cast<ui64>(123))), 123U);
  42. }
  43. TEST(TConvertTest, OutOfRange)
  44. {
  45. EXPECT_THROW_MESSAGE_HAS_SUBSTR(
  46. ConvertFromYsonString<i8>(ConvertToYsonString(static_cast<i64>(128))),
  47. TYsonLiteralParseException,
  48. "is out of expected range");
  49. EXPECT_THROW_MESSAGE_HAS_SUBSTR(
  50. ConvertFromYsonString<ui8>(ConvertToYsonString(static_cast<ui64>(256))),
  51. TYsonLiteralParseException,
  52. "is out of expected range");
  53. }
  54. TEST(TConvertTest, MalformedValues)
  55. {
  56. EXPECT_THROW_MESSAGE_HAS_SUBSTR(
  57. ConvertFromYsonString<TInstant>(ConvertToYsonString(TStringBuf("sometime"))),
  58. TYsonLiteralParseException,
  59. "Error parsing \"instant\" value");
  60. EXPECT_THROW_MESSAGE_HAS_SUBSTR(
  61. ConvertFromYsonString<TGuid>(ConvertToYsonString(TStringBuf("1-2-3-g"))),
  62. TYsonLiteralParseException,
  63. "Error parsing \"guid\" value");
  64. }
  65. ////////////////////////////////////////////////////////////////////////////////
  66. } // namespace
  67. } // namespace NYT::NYson