/* * Copyright 2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ #include "testutil.h" #include "internal/time.h" static int test_time_to_timeval(void) { OSSL_TIME a; struct timeval tv; a = ossl_time_zero(); tv = ossl_time_to_timeval(a); if (!TEST_long_eq(tv.tv_sec, 0) || !TEST_long_eq(tv.tv_usec, 0)) return 0; /* Test that zero round trips */ if (!TEST_true(ossl_time_is_zero(ossl_time_from_timeval(tv)))) return 0; /* We should round up nano secs to the next usec */ a = ossl_ticks2time(1); tv = ossl_time_to_timeval(a); if (!TEST_long_eq(tv.tv_sec, 0) || !TEST_long_eq(tv.tv_usec, 1)) return 0; a = ossl_ticks2time(999); tv = ossl_time_to_timeval(a); if (!TEST_long_eq(tv.tv_sec, 0) || !TEST_long_eq(tv.tv_usec, 1)) return 0; a = ossl_ticks2time(1000); tv = ossl_time_to_timeval(a); if (!TEST_long_eq(tv.tv_sec, 0) || !TEST_long_eq(tv.tv_usec, 1)) return 0; a = ossl_ticks2time(1001); tv = ossl_time_to_timeval(a); if (!TEST_long_eq(tv.tv_sec, 0) || !TEST_long_eq(tv.tv_usec, 2)) return 0; a = ossl_ticks2time(999000); tv = ossl_time_to_timeval(a); if (!TEST_long_eq(tv.tv_sec, 0) || !TEST_long_eq(tv.tv_usec, 999)) return 0; a = ossl_ticks2time(999999001); tv = ossl_time_to_timeval(a); if (!TEST_long_eq(tv.tv_sec, 1) || !TEST_long_eq(tv.tv_usec, 0)) return 0; a = ossl_ticks2time(999999999); tv = ossl_time_to_timeval(a); if (!TEST_long_eq(tv.tv_sec, 1) || !TEST_long_eq(tv.tv_usec, 0)) return 0; a = ossl_ticks2time(1000000000); tv = ossl_time_to_timeval(a); if (!TEST_long_eq(tv.tv_sec, 1) || !TEST_long_eq(tv.tv_usec, 0)) return 0; a = ossl_ticks2time(1000000001); tv = ossl_time_to_timeval(a); if (!TEST_long_eq(tv.tv_sec, 1) || !TEST_long_eq(tv.tv_usec, 1)) return 0; /* * Note that we don't currently support infinity round tripping. Instead * callers need to explicitly test for infinity. */ return 1; } int setup_tests(void) { ADD_TEST(test_time_to_timeval); return 1; }