time.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
3  */
4 
5 #include <gtest/gtest.h>
6 #include <uavcan/time.hpp>
7 #include <uavcan/Timestamp.hpp>
8 
9 
10 TEST(Time, Monotonic)
11 {
14 
15  MonotonicTime m1;
16  MonotonicTime m2 = MonotonicTime::fromMSec(1);
17  MonotonicDuration md1 = m2 - m1; // 1000
18  MonotonicDuration md2 = m1 - m2; // -1000
19 
20  ASSERT_EQ(0, m1.toUSec());
21  ASSERT_EQ(1000, m2.toUSec());
22  ASSERT_EQ(1000, md1.toUSec());
23  ASSERT_EQ(-1000, md2.toUSec());
24 
25  ASSERT_LT(m1, m2);
26  ASSERT_LE(m1, m2);
27  ASSERT_NE(m1, m2);
28  ASSERT_TRUE(m1.isZero());
29  ASSERT_FALSE(m2.isZero());
30 
31  ASSERT_GT(md1, md2);
32  ASSERT_GE(md1, md2);
33  ASSERT_NE(md1, md2);
34  ASSERT_FALSE(md1.isZero());
35  ASSERT_TRUE(md1.isPositive());
36  ASSERT_TRUE(md2.isNegative());
37 
38  ASSERT_EQ(0, (md1 + md2).toUSec());
39  ASSERT_EQ(2000, (md1 - md2).toUSec());
40 
41  md1 *= 2; // 2000
42  ASSERT_EQ(2000, md1.toUSec());
43 
44  md2 += md1; // md2 = -1000 + 2000
45  ASSERT_EQ(1000, md2.toUSec());
46 
47  ASSERT_EQ(-1000, (-md2).toUSec());
48 
49  /*
50  * To string
51  */
52  ASSERT_EQ("0.000000", m1.toString());
53  ASSERT_EQ("0.001000", m2.toString());
54 
55  ASSERT_EQ("0.002000", md1.toString());
56  ASSERT_EQ("-0.001000", (-md2).toString());
57 
58  ASSERT_EQ("1001.000001", MonotonicTime::fromUSec(1001000001).toString());
59  ASSERT_EQ("-1001.000001", MonotonicDuration::fromUSec(-1001000001).toString());
60 }
61 
62 
63 TEST(Time, Utc)
64 {
65  using uavcan::UtcDuration;
66  using uavcan::UtcTime;
67  using uavcan::Timestamp;
68 
69  Timestamp ts;
70  ts.usec = 9000;
71 
72  UtcTime u1(ts);
73  ASSERT_EQ(9000, u1.toUSec());
74 
75  ts.usec *= 2;
76  u1 = ts;
77  ASSERT_EQ(18000, u1.toUSec());
78 
79  ts = UtcTime::fromUSec(12345678900);
80  ASSERT_EQ(12345678900, ts.usec);
81 
82  /*
83  * To string
84  */
85  ASSERT_EQ("0.018000", u1.toString());
86  ASSERT_EQ("12345.678900", UtcTime(ts).toString());
87 }
88 
89 
90 TEST(Time, Overflow)
91 {
94 
95  MonotonicTime max_4 = MonotonicTime::fromUSec(MonotonicTime::getMax().toUSec() / 4);
96  MonotonicDuration max_4_duration = max_4 - MonotonicTime();
97 
98  std::cout << max_4 << std::endl;
99  ASSERT_EQ(max_4_duration.toUSec(), max_4.toUSec());
100 
101  MonotonicTime max = (((max_4 + max_4_duration) + max_4_duration) + max_4_duration) + max_4_duration;
102  ASSERT_EQ(max, MonotonicTime::getMax()); // Must not overflow
103 
104  MonotonicTime min;
105  min -= max_4_duration;
106  ASSERT_EQ(min, MonotonicTime()); // Must not underflow
107 }
uavcan::UtcTime
Implicitly convertible to/from uavcan.Timestamp.
Definition: time.hpp:191
uavcan::UtcDuration
Definition: time.hpp:189
uavcan::MonotonicDuration
Definition: time.hpp:182
uavcan::max
const UAVCAN_EXPORT T & max(const T &a, const T &b)
Definition: templates.hpp:291
toString
static std::string toString(long x)
Definition: multiset.cpp:16
uavcan::min
const UAVCAN_EXPORT T & min(const T &a, const T &b)
Definition: templates.hpp:281
TEST
TEST(Time, Monotonic)
Definition: time.cpp:10
uavcan::MonotonicTime
Definition: time.hpp:184
time.hpp


uavcan_communicator
Author(s):
autogenerated on Fri Dec 13 2024 03:10:03