py_tzdate_ut.cpp 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "py_variant.h"
  2. #include "ut3/py_test_engine.h"
  3. #include <yql/essentials/minikql/mkql_type_ops.h>
  4. #include <library/cpp/testing/unittest/registar.h>
  5. using namespace NPython;
  6. Y_UNIT_TEST_SUITE(TPyTzDateTest) {
  7. Y_UNIT_TEST(FromDate) {
  8. TPythonTestEngine engine;
  9. engine.ToMiniKQL<NUdf::TTzDate>(
  10. "def Test():\n"
  11. " return (2, 'Europe/Moscow')\n",
  12. [](const NUdf::TUnboxedValuePod& value) {
  13. UNIT_ASSERT(value);
  14. UNIT_ASSERT_VALUES_EQUAL(value.Get<ui16>(), 2);
  15. UNIT_ASSERT_VALUES_EQUAL(value.GetTimezoneId(), NKikimr::NMiniKQL::GetTimezoneId("Europe/Moscow"));
  16. });
  17. }
  18. Y_UNIT_TEST(FromDatetime) {
  19. TPythonTestEngine engine;
  20. engine.ToMiniKQL<NUdf::TTzDatetime>(
  21. "def Test():\n"
  22. " return (2, 'Europe/Moscow')\n",
  23. [](const NUdf::TUnboxedValuePod& value) {
  24. UNIT_ASSERT(value);
  25. UNIT_ASSERT_VALUES_EQUAL(value.Get<ui32>(), 2);
  26. UNIT_ASSERT_VALUES_EQUAL(value.GetTimezoneId(), NKikimr::NMiniKQL::GetTimezoneId("Europe/Moscow"));
  27. });
  28. }
  29. Y_UNIT_TEST(FromTimestamp) {
  30. TPythonTestEngine engine;
  31. engine.ToMiniKQL<NUdf::TTzTimestamp>(
  32. "def Test():\n"
  33. " return (2, 'Europe/Moscow')\n",
  34. [](const NUdf::TUnboxedValuePod& value) {
  35. UNIT_ASSERT(value);
  36. UNIT_ASSERT_VALUES_EQUAL(value.Get<ui64>(), 2);
  37. UNIT_ASSERT_VALUES_EQUAL(value.GetTimezoneId(), NKikimr::NMiniKQL::GetTimezoneId("Europe/Moscow"));
  38. });
  39. }
  40. Y_UNIT_TEST(ToDate) {
  41. TPythonTestEngine engine;
  42. engine.ToPython<NUdf::TTzDate>(
  43. [](const TType* /*type*/, const NUdf::IValueBuilder& /*vb*/) {
  44. auto ret = NUdf::TUnboxedValuePod((ui16)2);
  45. ret.SetTimezoneId(NKikimr::NMiniKQL::GetTimezoneId("Europe/Moscow"));
  46. return ret;
  47. },
  48. "def Test(value):\n"
  49. " assert isinstance(value, tuple)\n"
  50. " assert value == (2, 'Europe/Moscow')\n");
  51. }
  52. Y_UNIT_TEST(ToDatetime) {
  53. TPythonTestEngine engine;
  54. engine.ToPython<NUdf::TTzDatetime>(
  55. [](const TType* /*type*/, const NUdf::IValueBuilder& /*vb*/) {
  56. auto ret = NUdf::TUnboxedValuePod((ui32)2);
  57. ret.SetTimezoneId(NKikimr::NMiniKQL::GetTimezoneId("Europe/Moscow"));
  58. return ret;
  59. },
  60. "def Test(value):\n"
  61. " assert isinstance(value, tuple)\n"
  62. " assert value == (2, 'Europe/Moscow')\n");
  63. }
  64. Y_UNIT_TEST(ToTimestamp) {
  65. TPythonTestEngine engine;
  66. engine.ToPython<NUdf::TTzTimestamp>(
  67. [](const TType* /*type*/, const NUdf::IValueBuilder& /*vb*/) {
  68. auto ret = NUdf::TUnboxedValuePod((ui64)2);
  69. ret.SetTimezoneId(NKikimr::NMiniKQL::GetTimezoneId("Europe/Moscow"));
  70. return ret;
  71. },
  72. "def Test(value):\n"
  73. " assert isinstance(value, tuple)\n"
  74. " assert value == (2, 'Europe/Moscow')\n");
  75. }
  76. }