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 8static 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 29static 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 51static 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 73static 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 94static 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 120static 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 137BEGIN_TEST_CASE(time_test) 138RUN_TEST(time_add_duration_test) 139RUN_TEST(time_sub_duration_test) 140RUN_TEST(time_sub_time_test) 141RUN_TEST(duration_add_duration_test) 142 143RUN_TEST(duration_sub_duration_test) 144RUN_TEST(duration_mul_int64_test) 145END_TEST_CASE(time_test) 146 147int main(int argc, char** argv) { 148 bool success = unittest_run_all_tests(argc, argv); 149 return success ? 0 : -1; 150} 151