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