blob: eecfe02a9ad272d47df21c2bdaea5a4465ec5cf6 [file] [log] [blame]
Sebastian Jansson30bd4032018-04-13 13:56:17 +02001/*
2 * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Sebastian Jansson6fae6ec2018-05-08 10:43:18 +020011#include "api/units/timestamp.h"
Sebastian Jansson30bd4032018-04-13 13:56:17 +020012#include "test/gtest.h"
13
14namespace webrtc {
15namespace test {
16TEST(TimestampTest, GetBackSameValues) {
17 const int64_t kValue = 499;
18 EXPECT_EQ(Timestamp::ms(kValue).ms(), kValue);
19 EXPECT_EQ(Timestamp::us(kValue).us(), kValue);
Sebastian Janssonf7ffd942018-04-16 11:46:42 +020020 EXPECT_EQ(Timestamp::seconds(kValue).seconds(), kValue);
Sebastian Jansson30bd4032018-04-13 13:56:17 +020021}
22
23TEST(TimestampTest, GetDifferentPrefix) {
24 const int64_t kValue = 3000000;
Sebastian Janssonf7ffd942018-04-16 11:46:42 +020025 EXPECT_EQ(Timestamp::us(kValue).seconds(), kValue / 1000000);
26 EXPECT_EQ(Timestamp::ms(kValue).seconds(), kValue / 1000);
Sebastian Jansson30bd4032018-04-13 13:56:17 +020027 EXPECT_EQ(Timestamp::us(kValue).ms(), kValue / 1000);
28
29 EXPECT_EQ(Timestamp::ms(kValue).us(), kValue * 1000);
Sebastian Janssonf7ffd942018-04-16 11:46:42 +020030 EXPECT_EQ(Timestamp::seconds(kValue).ms(), kValue * 1000);
31 EXPECT_EQ(Timestamp::seconds(kValue).us(), kValue * 1000000);
Sebastian Jansson30bd4032018-04-13 13:56:17 +020032}
33
34TEST(TimestampTest, IdentityChecks) {
35 const int64_t kValue = 3000;
36
37 EXPECT_TRUE(Timestamp::Infinity().IsInfinite());
38 EXPECT_FALSE(Timestamp::ms(kValue).IsInfinite());
39
Sebastian Jansson30bd4032018-04-13 13:56:17 +020040 EXPECT_FALSE(Timestamp::Infinity().IsFinite());
41 EXPECT_TRUE(Timestamp::ms(kValue).IsFinite());
42}
43
44TEST(TimestampTest, ComparisonOperators) {
45 const int64_t kSmall = 450;
46 const int64_t kLarge = 451;
47
48 EXPECT_EQ(Timestamp::Infinity(), Timestamp::Infinity());
Sebastian Janssonec2eb222018-05-24 12:32:05 +020049 EXPECT_GE(Timestamp::Infinity(), Timestamp::Infinity());
50 EXPECT_GT(Timestamp::Infinity(), Timestamp::ms(kLarge));
Sebastian Jansson30bd4032018-04-13 13:56:17 +020051 EXPECT_EQ(Timestamp::ms(kSmall), Timestamp::ms(kSmall));
52 EXPECT_LE(Timestamp::ms(kSmall), Timestamp::ms(kSmall));
53 EXPECT_GE(Timestamp::ms(kSmall), Timestamp::ms(kSmall));
54 EXPECT_NE(Timestamp::ms(kSmall), Timestamp::ms(kLarge));
55 EXPECT_LE(Timestamp::ms(kSmall), Timestamp::ms(kLarge));
56 EXPECT_LT(Timestamp::ms(kSmall), Timestamp::ms(kLarge));
57 EXPECT_GE(Timestamp::ms(kLarge), Timestamp::ms(kSmall));
58 EXPECT_GT(Timestamp::ms(kLarge), Timestamp::ms(kSmall));
59}
60
Sebastian Jansson942b3602018-05-30 15:47:44 +020061TEST(TimestampTest, CanBeInititializedFromLargeInt) {
62 const int kMaxInt = std::numeric_limits<int>::max();
63 EXPECT_EQ(Timestamp::seconds(kMaxInt).us(),
64 static_cast<int64_t>(kMaxInt) * 1000000);
65 EXPECT_EQ(Timestamp::ms(kMaxInt).us(), static_cast<int64_t>(kMaxInt) * 1000);
66}
67
68TEST(TimestampTest, ConvertsToAndFromDouble) {
69 const int64_t kMicros = 17017;
70 const double kMicrosDouble = kMicros;
71 const double kMillisDouble = kMicros * 1e-3;
72 const double kSecondsDouble = kMillisDouble * 1e-3;
73
74 EXPECT_EQ(Timestamp::us(kMicros).seconds<double>(), kSecondsDouble);
75 EXPECT_EQ(Timestamp::seconds(kSecondsDouble).us(), kMicros);
76
77 EXPECT_EQ(Timestamp::us(kMicros).ms<double>(), kMillisDouble);
78 EXPECT_EQ(Timestamp::ms(kMillisDouble).us(), kMicros);
79
80 EXPECT_EQ(Timestamp::us(kMicros).us<double>(), kMicrosDouble);
81 EXPECT_EQ(Timestamp::us(kMicrosDouble).us(), kMicros);
82
83 const double kPlusInfinity = std::numeric_limits<double>::infinity();
84
85 EXPECT_EQ(Timestamp::Infinity().seconds<double>(), kPlusInfinity);
86 EXPECT_EQ(Timestamp::Infinity().ms<double>(), kPlusInfinity);
87 EXPECT_EQ(Timestamp::Infinity().us<double>(), kPlusInfinity);
88
89 EXPECT_TRUE(Timestamp::seconds(kPlusInfinity).IsInfinite());
90 EXPECT_TRUE(Timestamp::ms(kPlusInfinity).IsInfinite());
91 EXPECT_TRUE(Timestamp::us(kPlusInfinity).IsInfinite());
92}
93
Sebastian Jansson30bd4032018-04-13 13:56:17 +020094TEST(UnitConversionTest, TimestampAndTimeDeltaMath) {
95 const int64_t kValueA = 267;
96 const int64_t kValueB = 450;
97 const Timestamp time_a = Timestamp::ms(kValueA);
98 const Timestamp time_b = Timestamp::ms(kValueB);
99 const TimeDelta delta_a = TimeDelta::ms(kValueA);
100
101 EXPECT_EQ((time_a - time_b), TimeDelta::ms(kValueA - kValueB));
102 EXPECT_EQ((time_b - delta_a), Timestamp::ms(kValueB - kValueA));
103 EXPECT_EQ((time_b + delta_a), Timestamp::ms(kValueB + kValueA));
104}
105} // namespace test
106} // namespace webrtc