timestamp_test.cc 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. #include <gtest/gtest.h>
  4. #include <stdlib.h>
  5. #include <chrono>
  6. #include <string>
  7. #include "opentelemetry/common/timestamp.h"
  8. using opentelemetry::common::SteadyTimestamp;
  9. using opentelemetry::common::SystemTimestamp;
  10. template <class Timestamp>
  11. static bool AreNearlyEqual(const Timestamp &t1, const Timestamp &t2) noexcept
  12. {
  13. return std::abs(std::chrono::duration_cast<std::chrono::nanoseconds>(t2 - t1).count()) < 2;
  14. }
  15. TEST(SystemTimestampTest, Construction)
  16. {
  17. auto now_system = std::chrono::system_clock::now();
  18. SystemTimestamp t1;
  19. EXPECT_EQ(t1.time_since_epoch(), std::chrono::nanoseconds{0});
  20. SystemTimestamp t2{now_system};
  21. EXPECT_TRUE(AreNearlyEqual(now_system, static_cast<std::chrono::system_clock::time_point>(t2)));
  22. EXPECT_EQ(std::chrono::duration_cast<std::chrono::nanoseconds>(now_system.time_since_epoch()),
  23. t2.time_since_epoch());
  24. }
  25. TEST(SystemTimestampTest, Comparison)
  26. {
  27. SystemTimestamp t1;
  28. SystemTimestamp t2;
  29. SystemTimestamp t3{std::chrono::nanoseconds{2}};
  30. EXPECT_EQ(t1, t1);
  31. EXPECT_EQ(t1, t2);
  32. EXPECT_EQ(t2, t1);
  33. EXPECT_NE(t1, t3);
  34. EXPECT_NE(t3, t1);
  35. }
  36. TEST(SteadyTimestampTest, Construction)
  37. {
  38. auto now_steady = std::chrono::steady_clock::now();
  39. SteadyTimestamp t1;
  40. EXPECT_EQ(t1.time_since_epoch(), std::chrono::nanoseconds{0});
  41. SteadyTimestamp t2{now_steady};
  42. EXPECT_TRUE(AreNearlyEqual(now_steady, static_cast<std::chrono::steady_clock::time_point>(t2)));
  43. EXPECT_EQ(std::chrono::duration_cast<std::chrono::nanoseconds>(now_steady.time_since_epoch()),
  44. t2.time_since_epoch());
  45. }
  46. TEST(SteadyTimestampTest, Comparison)
  47. {
  48. SteadyTimestamp t1;
  49. SteadyTimestamp t2;
  50. SteadyTimestamp t3{std::chrono::nanoseconds{2}};
  51. EXPECT_EQ(t1, t1);
  52. EXPECT_EQ(t1, t2);
  53. EXPECT_EQ(t2, t1);
  54. EXPECT_NE(t1, t3);
  55. EXPECT_NE(t3, t1);
  56. }