cast_ut.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include <library/cpp/protobuf/interop/cast.h>
  2. #include <library/cpp/testing/unittest/registar.h>
  3. #include <google/protobuf/duration.pb.h>
  4. #include <google/protobuf/timestamp.pb.h>
  5. static constexpr ui64 MicroSecondsInSecond = 1000 * 1000;
  6. static constexpr ui64 NanoSecondsInMicroSecond = 1000;
  7. Y_UNIT_TEST_SUITE(TCastTest) {
  8. Y_UNIT_TEST(TimestampFromProto) {
  9. const ui64 now = TInstant::Now().MicroSeconds();
  10. google::protobuf::Timestamp timestamp;
  11. timestamp.set_seconds(now / MicroSecondsInSecond);
  12. timestamp.set_nanos((now % MicroSecondsInSecond) * NanoSecondsInMicroSecond);
  13. const TInstant instant = NProtoInterop::CastFromProto(timestamp);
  14. UNIT_ASSERT_EQUAL(instant.MicroSeconds(), now);
  15. }
  16. Y_UNIT_TEST(DurationFromProto) {
  17. const ui64 now = TInstant::Now().MicroSeconds();
  18. google::protobuf::Duration message;
  19. message.set_seconds(now / MicroSecondsInSecond);
  20. message.set_nanos((now % MicroSecondsInSecond) * NanoSecondsInMicroSecond);
  21. const TDuration duration = NProtoInterop::CastFromProto(message);
  22. UNIT_ASSERT_EQUAL(duration.MicroSeconds(), now);
  23. }
  24. Y_UNIT_TEST(TimestampToProto) {
  25. const TInstant instant = TInstant::Now();
  26. google::protobuf::Timestamp timestamp = NProtoInterop::CastToProto(instant);
  27. const ui64 microSeconds = timestamp.seconds() * MicroSecondsInSecond +
  28. timestamp.nanos() / NanoSecondsInMicroSecond;
  29. UNIT_ASSERT_EQUAL(instant.MicroSeconds(), microSeconds);
  30. }
  31. Y_UNIT_TEST(DurationToProto) {
  32. const TDuration duration = TDuration::Seconds(TInstant::Now().Seconds() / 2);
  33. google::protobuf::Duration message = NProtoInterop::CastToProto(duration);
  34. const ui64 microSeconds = message.seconds() * MicroSecondsInSecond +
  35. message.nanos() / NanoSecondsInMicroSecond;
  36. UNIT_ASSERT_EQUAL(duration.MicroSeconds(), microSeconds);
  37. }
  38. }