Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: UAVCAN UAVCAN_Subscriber
time.cpp
00001 /* 00002 * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com> 00003 */ 00004 00005 #include <gtest/gtest.h> 00006 #include <uavcan/time.hpp> 00007 #include <uavcan/Timestamp.hpp> 00008 00009 00010 TEST(Time, Monotonic) 00011 { 00012 using uavcan::MonotonicDuration; 00013 using uavcan::MonotonicTime; 00014 00015 MonotonicTime m1; 00016 MonotonicTime m2 = MonotonicTime::fromMSec(1); 00017 MonotonicDuration md1 = m2 - m1; // 1000 00018 MonotonicDuration md2 = m1 - m2; // -1000 00019 00020 ASSERT_EQ(0, m1.toUSec()); 00021 ASSERT_EQ(1000, m2.toUSec()); 00022 ASSERT_EQ(1000, md1.toUSec()); 00023 ASSERT_EQ(-1000, md2.toUSec()); 00024 00025 ASSERT_LT(m1, m2); 00026 ASSERT_LE(m1, m2); 00027 ASSERT_NE(m1, m2); 00028 ASSERT_TRUE(m1.isZero()); 00029 ASSERT_FALSE(m2.isZero()); 00030 00031 ASSERT_GT(md1, md2); 00032 ASSERT_GE(md1, md2); 00033 ASSERT_NE(md1, md2); 00034 ASSERT_FALSE(md1.isZero()); 00035 ASSERT_TRUE(md1.isPositive()); 00036 ASSERT_TRUE(md2.isNegative()); 00037 00038 ASSERT_EQ(0, (md1 + md2).toUSec()); 00039 ASSERT_EQ(2000, (md1 - md2).toUSec()); 00040 00041 md1 *= 2; // 2000 00042 ASSERT_EQ(2000, md1.toUSec()); 00043 00044 md2 += md1; // md2 = -1000 + 2000 00045 ASSERT_EQ(1000, md2.toUSec()); 00046 00047 ASSERT_EQ(-1000, (-md2).toUSec()); 00048 00049 /* 00050 * To string 00051 */ 00052 ASSERT_EQ("0.000000", m1.toString()); 00053 ASSERT_EQ("0.001000", m2.toString()); 00054 00055 ASSERT_EQ("0.002000", md1.toString()); 00056 ASSERT_EQ("-0.001000", (-md2).toString()); 00057 00058 ASSERT_EQ("1001.000001", MonotonicTime::fromUSec(1001000001).toString()); 00059 ASSERT_EQ("-1001.000001", MonotonicDuration::fromUSec(-1001000001).toString()); 00060 } 00061 00062 00063 TEST(Time, Utc) 00064 { 00065 using uavcan::UtcDuration; 00066 using uavcan::UtcTime; 00067 using uavcan::Timestamp; 00068 00069 Timestamp ts; 00070 ts.usec = 9000; 00071 00072 UtcTime u1(ts); 00073 ASSERT_EQ(9000, u1.toUSec()); 00074 00075 ts.usec *= 2; 00076 u1 = ts; 00077 ASSERT_EQ(18000, u1.toUSec()); 00078 00079 ts = UtcTime::fromUSec(12345678900); 00080 ASSERT_EQ(12345678900, ts.usec); 00081 00082 /* 00083 * To string 00084 */ 00085 ASSERT_EQ("0.018000", u1.toString()); 00086 ASSERT_EQ("12345.678900", UtcTime(ts).toString()); 00087 } 00088 00089 00090 TEST(Time, Overflow) 00091 { 00092 using uavcan::MonotonicDuration; 00093 using uavcan::MonotonicTime; 00094 00095 MonotonicTime max_4 = MonotonicTime::fromUSec(MonotonicTime::getMax().toUSec() / 4); 00096 MonotonicDuration max_4_duration = max_4 - MonotonicTime(); 00097 00098 std::cout << max_4 << std::endl; 00099 ASSERT_EQ(max_4_duration.toUSec(), max_4.toUSec()); 00100 00101 MonotonicTime max = (((max_4 + max_4_duration) + max_4_duration) + max_4_duration) + max_4_duration; 00102 ASSERT_EQ(max, MonotonicTime::getMax()); // Must not overflow 00103 00104 MonotonicTime min; 00105 min -= max_4_duration; 00106 ASSERT_EQ(min, MonotonicTime()); // Must not underflow 00107 }
Generated on Tue Jul 12 2022 17:17:35 by
