1 // Copyright 2018 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <unittest/unittest.h>
6 #include <zircon/time.h>
7
time_add_duration_test()8 static bool time_add_duration_test() {
9 BEGIN_TEST;
10
11 EXPECT_EQ(0, zx_time_add_duration(0, 0));
12
13 EXPECT_EQ(918741562, zx_time_add_duration(918729180, 12382));
14
15 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_time_add_duration(ZX_TIME_INFINITE_PAST, 0));
16 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_time_add_duration(ZX_TIME_INFINITE_PAST, -1));
17 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_time_add_duration(ZX_TIME_INFINITE_PAST, -3298901));
18 EXPECT_EQ(ZX_TIME_INFINITE_PAST,
19 zx_time_add_duration(ZX_TIME_INFINITE_PAST, ZX_TIME_INFINITE_PAST));
20
21 EXPECT_EQ(ZX_TIME_INFINITE, zx_time_add_duration(ZX_TIME_INFINITE, 0));
22 EXPECT_EQ(ZX_TIME_INFINITE, zx_time_add_duration(ZX_TIME_INFINITE, 1));
23 EXPECT_EQ(ZX_TIME_INFINITE, zx_time_add_duration(ZX_TIME_INFINITE, 3298901));
24 EXPECT_EQ(ZX_TIME_INFINITE, zx_time_add_duration(ZX_TIME_INFINITE, ZX_TIME_INFINITE));
25
26 END_TEST;
27 }
28
time_sub_duration_test()29 static bool time_sub_duration_test() {
30 BEGIN_TEST;
31
32 EXPECT_EQ(-1, zx_time_sub_duration(1, 2));
33 EXPECT_EQ(-1, zx_time_sub_duration(0, 1));
34
35 EXPECT_EQ(0, zx_time_sub_duration(0, 0));
36 EXPECT_EQ(0, zx_time_sub_duration(ZX_TIME_INFINITE_PAST, ZX_TIME_INFINITE_PAST));
37 EXPECT_EQ(0, zx_time_sub_duration(ZX_TIME_INFINITE, ZX_TIME_INFINITE));
38
39 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_time_sub_duration(ZX_TIME_INFINITE_PAST, 0));
40 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_time_sub_duration(ZX_TIME_INFINITE_PAST, 1));
41 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_time_sub_duration(ZX_TIME_INFINITE_PAST, ZX_TIME_INFINITE));
42 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_time_sub_duration(INT64_MIN, INT64_MAX));
43
44 EXPECT_EQ((ZX_TIME_INFINITE - 1), zx_time_sub_duration(ZX_TIME_INFINITE, 1));
45
46 EXPECT_EQ(918716798, zx_time_sub_duration(918729180, 12382));
47
48 END_TEST;
49 }
50
time_sub_time_test()51 static bool time_sub_time_test() {
52 BEGIN_TEST;
53
54 EXPECT_EQ(-1, zx_time_sub_time(1, 2));
55 EXPECT_EQ(-1, zx_time_sub_time(0, 1));
56
57 EXPECT_EQ(0, zx_time_sub_time(0, 0));
58 EXPECT_EQ(0, zx_time_sub_time(ZX_TIME_INFINITE_PAST, ZX_TIME_INFINITE_PAST));
59 EXPECT_EQ(0, zx_time_sub_time(ZX_TIME_INFINITE, ZX_TIME_INFINITE));
60
61 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_time_sub_time(ZX_TIME_INFINITE_PAST, 0));
62 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_time_sub_time(ZX_TIME_INFINITE_PAST, 1));
63 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_time_sub_time(ZX_TIME_INFINITE_PAST, ZX_TIME_INFINITE));
64 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_time_sub_time(INT64_MIN, INT64_MAX));
65
66 EXPECT_EQ((ZX_TIME_INFINITE - 1), zx_time_sub_time(ZX_TIME_INFINITE, 1));
67
68 EXPECT_EQ(918716798, zx_time_sub_time(918729180, 12382));
69
70 END_TEST;
71 }
72
duration_add_duration_test()73 static bool duration_add_duration_test() {
74 BEGIN_TEST;
75
76 EXPECT_EQ(0, zx_duration_add_duration(0, 0));
77
78 EXPECT_EQ(918741562, zx_duration_add_duration(918729180, 12382));
79
80 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_duration_add_duration(ZX_TIME_INFINITE_PAST, 0));
81 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_duration_add_duration(ZX_TIME_INFINITE_PAST, -1));
82 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_duration_add_duration(ZX_TIME_INFINITE_PAST, -3298901));
83 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_duration_add_duration(ZX_TIME_INFINITE_PAST, ZX_TIME_INFINITE_PAST));
84
85 EXPECT_EQ(ZX_TIME_INFINITE, zx_duration_add_duration(ZX_TIME_INFINITE, 0));
86 EXPECT_EQ(ZX_TIME_INFINITE, zx_duration_add_duration(ZX_TIME_INFINITE, 1));
87 EXPECT_EQ(ZX_TIME_INFINITE, zx_duration_add_duration(ZX_TIME_INFINITE, 3298901));
88 EXPECT_EQ(ZX_TIME_INFINITE, zx_duration_add_duration(ZX_TIME_INFINITE, ZX_TIME_INFINITE));
89 EXPECT_EQ(ZX_TIME_INFINITE, zx_duration_add_duration(ZX_TIME_INFINITE, INT64_MAX));
90
91 END_TEST;
92 }
93
duration_sub_duration_test()94 static bool duration_sub_duration_test() {
95 BEGIN_TEST;
96
97 EXPECT_EQ(918716798, zx_duration_sub_duration(918729180, 12382));
98
99 EXPECT_EQ(-1, zx_duration_sub_duration(1, 2));
100 EXPECT_EQ(-1, zx_duration_sub_duration(0, 1));
101
102 EXPECT_EQ(0, zx_duration_sub_duration(0, 0));
103 EXPECT_EQ(0, zx_duration_sub_duration(3980, 3980));
104 EXPECT_EQ(0, zx_duration_sub_duration(ZX_TIME_INFINITE_PAST, ZX_TIME_INFINITE_PAST));
105 EXPECT_EQ(0, zx_duration_sub_duration(ZX_TIME_INFINITE, ZX_TIME_INFINITE));
106
107 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_duration_sub_duration(ZX_TIME_INFINITE_PAST, 0));
108 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_duration_sub_duration(ZX_TIME_INFINITE_PAST, 1));
109 EXPECT_EQ(ZX_TIME_INFINITE_PAST,
110 zx_duration_sub_duration(ZX_TIME_INFINITE_PAST, ZX_TIME_INFINITE));
111 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_duration_sub_duration(INT64_MIN, INT64_MAX));
112
113 EXPECT_EQ((ZX_TIME_INFINITE - 1), zx_duration_sub_duration(ZX_TIME_INFINITE, 1));
114
115 EXPECT_EQ(ZX_TIME_INFINITE, zx_duration_sub_duration(0, ZX_TIME_INFINITE_PAST));
116
117 END_TEST;
118 }
119
duration_mul_int64_test()120 static bool duration_mul_int64_test() {
121 BEGIN_TEST;
122
123 EXPECT_EQ(0, zx_duration_mul_int64(0, 0));
124 EXPECT_EQ(39284291, zx_duration_mul_int64(39284291, 1));
125 EXPECT_EQ(220499082795, zx_duration_mul_int64(23451, 9402545));
126 EXPECT_EQ(-39284291, zx_duration_mul_int64(39284291, -1));
127 EXPECT_EQ(-220499082795, zx_duration_mul_int64(23451, -9402545));
128 EXPECT_EQ(220499082795, zx_duration_mul_int64(-23451, -9402545));
129
130 EXPECT_EQ(ZX_TIME_INFINITE, zx_duration_mul_int64(ZX_TIME_INFINITE, 2));
131 EXPECT_EQ(ZX_TIME_INFINITE, zx_duration_mul_int64(ZX_TIME_INFINITE_PAST, -2));
132 EXPECT_EQ(ZX_TIME_INFINITE_PAST, zx_duration_mul_int64(ZX_TIME_INFINITE_PAST, 2));
133
134 END_TEST;
135 }
136
137 BEGIN_TEST_CASE(time_test)
RUN_TEST(time_add_duration_test)138 RUN_TEST(time_add_duration_test)
139 RUN_TEST(time_sub_duration_test)
140 RUN_TEST(time_sub_time_test)
141 RUN_TEST(duration_add_duration_test)
142
143 RUN_TEST(duration_sub_duration_test)
144 RUN_TEST(duration_mul_int64_test)
145 END_TEST_CASE(time_test)
146
147 int main(int argc, char** argv) {
148 bool success = unittest_run_all_tests(argc, argv);
149 return success ? 0 : -1;
150 }
151