aboutsummaryrefslogtreecommitdiff
path: root/test/common_plat/validation/api/time/time.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/common_plat/validation/api/time/time.c')
-rw-r--r--test/common_plat/validation/api/time/time.c481
1 files changed, 0 insertions, 481 deletions
diff --git a/test/common_plat/validation/api/time/time.c b/test/common_plat/validation/api/time/time.c
deleted file mode 100644
index e2ca2e17c..000000000
--- a/test/common_plat/validation/api/time/time.c
+++ /dev/null
@@ -1,481 +0,0 @@
-/* Copyright (c) 2015, Linaro Limited
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <odp_api.h>
-#include "odp_cunit_common.h"
-#include "time_test.h"
-#include <time.h>
-
-#define BUSY_LOOP_CNT 30000000 /* used for t > min resolution */
-#define BUSY_LOOP_CNT_LONG 6000000000 /* used for t > 4 sec */
-#define MIN_TIME_RATE 32000
-#define MAX_TIME_RATE 15000000000
-#define DELAY_TOLERANCE 20000000 /* deviation for delay */
-#define WAIT_SECONDS 3
-
-static uint64_t local_res;
-static uint64_t global_res;
-
-typedef odp_time_t time_cb(void);
-typedef uint64_t time_res_cb(void);
-typedef odp_time_t time_from_ns_cb(uint64_t ns);
-
-void time_test_constants(void)
-{
- uint64_t ns;
-
- ns = ODP_TIME_SEC_IN_NS / 1000;
- CU_ASSERT(ns == ODP_TIME_MSEC_IN_NS);
- ns /= 1000;
- CU_ASSERT(ns == ODP_TIME_USEC_IN_NS);
-}
-
-static void time_test_res(time_res_cb time_res, uint64_t *res)
-{
- uint64_t rate;
-
- rate = time_res();
- CU_ASSERT(rate > MIN_TIME_RATE);
- CU_ASSERT(rate < MAX_TIME_RATE);
-
- *res = ODP_TIME_SEC_IN_NS / rate;
- if (ODP_TIME_SEC_IN_NS % rate)
- (*res)++;
-}
-
-void time_test_local_res(void)
-{
- time_test_res(odp_time_local_res, &local_res);
-}
-
-void time_test_global_res(void)
-{
- time_test_res(odp_time_global_res, &global_res);
-}
-
-/* check that related conversions come back to the same value */
-static void time_test_conversion(time_from_ns_cb time_from_ns, uint64_t res)
-{
- uint64_t ns1, ns2;
- odp_time_t time;
- uint64_t upper_limit, lower_limit;
-
- ns1 = 100;
- time = time_from_ns(ns1);
-
- ns2 = odp_time_to_ns(time);
-
- /* need to check within arithmetic tolerance that the same
- * value in ns is returned after conversions */
- upper_limit = ns1 + res;
- lower_limit = ns1 - res;
- CU_ASSERT((ns2 <= upper_limit) && (ns2 >= lower_limit));
-
- ns1 = 60 * 11 * ODP_TIME_SEC_IN_NS;
- time = time_from_ns(ns1);
-
- ns2 = odp_time_to_ns(time);
-
- /* need to check within arithmetic tolerance that the same
- * value in ns is returned after conversions */
- upper_limit = ns1 + res;
- lower_limit = ns1 - res;
- CU_ASSERT((ns2 <= upper_limit) && (ns2 >= lower_limit));
-
- /* test on 0 */
- ns1 = odp_time_to_ns(ODP_TIME_NULL);
- CU_ASSERT(ns1 == 0);
-}
-
-void time_test_local_conversion(void)
-{
- time_test_conversion(odp_time_local_from_ns, local_res);
-}
-
-void time_test_global_conversion(void)
-{
- time_test_conversion(odp_time_global_from_ns, global_res);
-}
-
-void time_test_monotony(void)
-{
- volatile uint64_t count = 0;
- odp_time_t l_t1, l_t2, l_t3;
- odp_time_t g_t1, g_t2, g_t3;
- uint64_t ns1, ns2, ns3;
-
- l_t1 = odp_time_local();
- g_t1 = odp_time_global();
-
- while (count < BUSY_LOOP_CNT) {
- count++;
- };
-
- l_t2 = odp_time_local();
- g_t2 = odp_time_global();
-
- while (count < BUSY_LOOP_CNT_LONG) {
- count++;
- };
-
- l_t3 = odp_time_local();
- g_t3 = odp_time_global();
-
- ns1 = odp_time_to_ns(l_t1);
- ns2 = odp_time_to_ns(l_t2);
- ns3 = odp_time_to_ns(l_t3);
-
- /* Local time assertions */
- CU_ASSERT(ns2 > ns1);
- CU_ASSERT(ns3 > ns2);
-
- ns1 = odp_time_to_ns(g_t1);
- ns2 = odp_time_to_ns(g_t2);
- ns3 = odp_time_to_ns(g_t3);
-
- /* Global time assertions */
- CU_ASSERT(ns2 > ns1);
- CU_ASSERT(ns3 > ns2);
-}
-
-static void time_test_cmp(time_cb time_cur, time_from_ns_cb time_from_ns)
-{
- /* volatile to stop optimization of busy loop */
- volatile int count = 0;
- odp_time_t t1, t2, t3;
-
- t1 = time_cur();
-
- while (count < BUSY_LOOP_CNT) {
- count++;
- };
-
- t2 = time_cur();
-
- while (count < BUSY_LOOP_CNT * 2) {
- count++;
- };
-
- t3 = time_cur();
-
- CU_ASSERT(odp_time_cmp(t2, t1) > 0);
- CU_ASSERT(odp_time_cmp(t3, t2) > 0);
- CU_ASSERT(odp_time_cmp(t3, t1) > 0);
- CU_ASSERT(odp_time_cmp(t1, t2) < 0);
- CU_ASSERT(odp_time_cmp(t2, t3) < 0);
- CU_ASSERT(odp_time_cmp(t1, t3) < 0);
- CU_ASSERT(odp_time_cmp(t1, t1) == 0);
- CU_ASSERT(odp_time_cmp(t2, t2) == 0);
- CU_ASSERT(odp_time_cmp(t3, t3) == 0);
-
- t2 = time_from_ns(60 * 10 * ODP_TIME_SEC_IN_NS);
- t1 = time_from_ns(3);
-
- CU_ASSERT(odp_time_cmp(t2, t1) > 0);
- CU_ASSERT(odp_time_cmp(t1, t2) < 0);
-
- t1 = time_from_ns(0);
- CU_ASSERT(odp_time_cmp(t1, ODP_TIME_NULL) == 0);
-}
-
-void time_test_local_cmp(void)
-{
- time_test_cmp(odp_time_local, odp_time_local_from_ns);
-}
-
-void time_test_global_cmp(void)
-{
- time_test_cmp(odp_time_global, odp_time_global_from_ns);
-}
-
-/* check that a time difference gives a reasonable result */
-static void time_test_diff(time_cb time_cur,
- time_from_ns_cb time_from_ns,
- uint64_t res)
-{
- /* volatile to stop optimization of busy loop */
- volatile int count = 0;
- odp_time_t diff, t1, t2;
- uint64_t nsdiff, ns1, ns2, ns;
- uint64_t upper_limit, lower_limit;
-
- /* test timestamp diff */
- t1 = time_cur();
-
- while (count < BUSY_LOOP_CNT) {
- count++;
- };
-
- t2 = time_cur();
- CU_ASSERT(odp_time_cmp(t2, t1) > 0);
-
- diff = odp_time_diff(t2, t1);
- CU_ASSERT(odp_time_cmp(diff, ODP_TIME_NULL) > 0);
-
- ns1 = odp_time_to_ns(t1);
- ns2 = odp_time_to_ns(t2);
- ns = ns2 - ns1;
- nsdiff = odp_time_to_ns(diff);
-
- upper_limit = ns + 2 * res;
- lower_limit = ns - 2 * res;
- CU_ASSERT((nsdiff <= upper_limit) && (nsdiff >= lower_limit));
-
- /* test timestamp and interval diff */
- ns1 = 54;
- t1 = time_from_ns(ns1);
- ns = ns2 - ns1;
-
- diff = odp_time_diff(t2, t1);
- CU_ASSERT(odp_time_cmp(diff, ODP_TIME_NULL) > 0);
- nsdiff = odp_time_to_ns(diff);
-
- upper_limit = ns + 2 * res;
- lower_limit = ns - 2 * res;
- CU_ASSERT((nsdiff <= upper_limit) && (nsdiff >= lower_limit));
-
- /* test interval diff */
- ns2 = 60 * 10 * ODP_TIME_SEC_IN_NS;
- ns = ns2 - ns1;
-
- t2 = time_from_ns(ns2);
- diff = odp_time_diff(t2, t1);
- CU_ASSERT(odp_time_cmp(diff, ODP_TIME_NULL) > 0);
- nsdiff = odp_time_to_ns(diff);
-
- upper_limit = ns + 2 * res;
- lower_limit = ns - 2 * res;
- CU_ASSERT((nsdiff <= upper_limit) && (nsdiff >= lower_limit));
-
- /* same time has to diff to 0 */
- diff = odp_time_diff(t2, t2);
- CU_ASSERT(odp_time_cmp(diff, ODP_TIME_NULL) == 0);
-
- diff = odp_time_diff(t2, ODP_TIME_NULL);
- CU_ASSERT(odp_time_cmp(t2, diff) == 0);
-}
-
-void time_test_local_diff(void)
-{
- time_test_diff(odp_time_local, odp_time_local_from_ns, local_res);
-}
-
-void time_test_global_diff(void)
-{
- time_test_diff(odp_time_global, odp_time_global_from_ns, global_res);
-}
-
-/* check that a time sum gives a reasonable result */
-static void time_test_sum(time_cb time_cur,
- time_from_ns_cb time_from_ns,
- uint64_t res)
-{
- odp_time_t sum, t1, t2;
- uint64_t nssum, ns1, ns2, ns;
- uint64_t upper_limit, lower_limit;
-
- /* sum timestamp and interval */
- t1 = time_cur();
- ns2 = 103;
- t2 = time_from_ns(ns2);
- ns1 = odp_time_to_ns(t1);
- ns = ns1 + ns2;
-
- sum = odp_time_sum(t2, t1);
- CU_ASSERT(odp_time_cmp(sum, ODP_TIME_NULL) > 0);
- nssum = odp_time_to_ns(sum);
-
- upper_limit = ns + 2 * res;
- lower_limit = ns - 2 * res;
- CU_ASSERT((nssum <= upper_limit) && (nssum >= lower_limit));
-
- /* sum intervals */
- ns1 = 60 * 13 * ODP_TIME_SEC_IN_NS;
- t1 = time_from_ns(ns1);
- ns = ns1 + ns2;
-
- sum = odp_time_sum(t2, t1);
- CU_ASSERT(odp_time_cmp(sum, ODP_TIME_NULL) > 0);
- nssum = odp_time_to_ns(sum);
-
- upper_limit = ns + 2 * res;
- lower_limit = ns - 2 * res;
- CU_ASSERT((nssum <= upper_limit) && (nssum >= lower_limit));
-
- /* test on 0 */
- sum = odp_time_sum(t2, ODP_TIME_NULL);
- CU_ASSERT(odp_time_cmp(t2, sum) == 0);
-}
-
-void time_test_local_sum(void)
-{
- time_test_sum(odp_time_local, odp_time_local_from_ns, local_res);
-}
-
-void time_test_global_sum(void)
-{
- time_test_sum(odp_time_global, odp_time_global_from_ns, global_res);
-}
-
-static void time_test_wait_until(time_cb time_cur, time_from_ns_cb time_from_ns)
-{
- int i;
- odp_time_t lower_limit, upper_limit;
- odp_time_t start_time, end_time, wait;
- odp_time_t second = time_from_ns(ODP_TIME_SEC_IN_NS);
-
- start_time = time_cur();
- wait = start_time;
- for (i = 0; i < WAIT_SECONDS; i++) {
- wait = odp_time_sum(wait, second);
- odp_time_wait_until(wait);
- }
- end_time = time_cur();
-
- wait = odp_time_diff(end_time, start_time);
- lower_limit = time_from_ns(WAIT_SECONDS * ODP_TIME_SEC_IN_NS -
- DELAY_TOLERANCE);
- upper_limit = time_from_ns(WAIT_SECONDS * ODP_TIME_SEC_IN_NS +
- DELAY_TOLERANCE);
-
- if (odp_time_cmp(wait, lower_limit) < 0) {
- fprintf(stderr, "Exceed lower limit: "
- "wait is %" PRIu64 ", lower_limit %" PRIu64 "\n",
- odp_time_to_ns(wait), odp_time_to_ns(lower_limit));
- CU_FAIL("Exceed lower limit\n");
- }
-
- if (odp_time_cmp(wait, upper_limit) > 0) {
- fprintf(stderr, "Exceed upper limit: "
- "wait is %" PRIu64 ", upper_limit %" PRIu64 "\n",
- odp_time_to_ns(wait), odp_time_to_ns(lower_limit));
- CU_FAIL("Exceed upper limit\n");
- }
-}
-
-void time_test_local_wait_until(void)
-{
- time_test_wait_until(odp_time_local, odp_time_local_from_ns);
-}
-
-void time_test_global_wait_until(void)
-{
- time_test_wait_until(odp_time_global, odp_time_global_from_ns);
-}
-
-void time_test_wait_ns(void)
-{
- int i;
- odp_time_t lower_limit, upper_limit;
- odp_time_t start_time, end_time, diff;
-
- start_time = odp_time_local();
- for (i = 0; i < WAIT_SECONDS; i++)
- odp_time_wait_ns(ODP_TIME_SEC_IN_NS);
- end_time = odp_time_local();
-
- diff = odp_time_diff(end_time, start_time);
-
- lower_limit = odp_time_local_from_ns(WAIT_SECONDS * ODP_TIME_SEC_IN_NS -
- DELAY_TOLERANCE);
- upper_limit = odp_time_local_from_ns(WAIT_SECONDS * ODP_TIME_SEC_IN_NS +
- DELAY_TOLERANCE);
-
- if (odp_time_cmp(diff, lower_limit) < 0) {
- fprintf(stderr, "Exceed lower limit: "
- "diff is %" PRIu64 ", lower_limit %" PRIu64 "\n",
- odp_time_to_ns(diff), odp_time_to_ns(lower_limit));
- CU_FAIL("Exceed lower limit\n");
- }
-
- if (odp_time_cmp(diff, upper_limit) > 0) {
- fprintf(stderr, "Exceed upper limit: "
- "diff is %" PRIu64 ", upper_limit %" PRIu64 "\n",
- odp_time_to_ns(diff), odp_time_to_ns(lower_limit));
- CU_FAIL("Exceed upper limit\n");
- }
-}
-
-static void time_test_accuracy(time_cb time_cur, time_from_ns_cb time_from_ns)
-{
- int i;
- odp_time_t t1, t2, wait, diff;
- clock_t c1, c2;
- double sec_t, sec_c;
- odp_time_t sec = time_from_ns(ODP_TIME_SEC_IN_NS);
-
- c1 = clock();
- t1 = time_cur();
-
- wait = odp_time_sum(t1, sec);
- for (i = 0; i < 5; i++) {
- odp_time_wait_until(wait);
- wait = odp_time_sum(wait, sec);
- }
-
- t2 = time_cur();
- c2 = clock();
-
- diff = odp_time_diff(t2, t1);
- sec_t = ((double)odp_time_to_ns(diff)) / ODP_TIME_SEC_IN_NS;
- sec_c = ((double)(c2 - c1)) / CLOCKS_PER_SEC;
-
- /* Check that ODP time is within +-5% of system time */
- CU_ASSERT(sec_t < sec_c * 1.05);
- CU_ASSERT(sec_t > sec_c * 0.95);
-}
-
-static void time_test_local_accuracy(void)
-{
- time_test_accuracy(odp_time_local, odp_time_local_from_ns);
-}
-
-static void time_test_global_accuracy(void)
-{
- time_test_accuracy(odp_time_global, odp_time_global_from_ns);
-}
-
-odp_testinfo_t time_suite_time[] = {
- ODP_TEST_INFO(time_test_constants),
- ODP_TEST_INFO(time_test_local_res),
- ODP_TEST_INFO(time_test_local_conversion),
- ODP_TEST_INFO(time_test_monotony),
- ODP_TEST_INFO(time_test_local_cmp),
- ODP_TEST_INFO(time_test_local_diff),
- ODP_TEST_INFO(time_test_local_sum),
- ODP_TEST_INFO(time_test_local_wait_until),
- ODP_TEST_INFO(time_test_wait_ns),
- ODP_TEST_INFO(time_test_local_accuracy),
- ODP_TEST_INFO(time_test_global_res),
- ODP_TEST_INFO(time_test_global_conversion),
- ODP_TEST_INFO(time_test_global_cmp),
- ODP_TEST_INFO(time_test_global_diff),
- ODP_TEST_INFO(time_test_global_sum),
- ODP_TEST_INFO(time_test_global_wait_until),
- ODP_TEST_INFO(time_test_global_accuracy),
- ODP_TEST_INFO_NULL
-};
-
-odp_suiteinfo_t time_suites[] = {
- {"Time", NULL, NULL, time_suite_time},
- ODP_SUITE_INFO_NULL
-};
-
-int time_main(int argc, char *argv[])
-{
- int ret;
-
- /* parse common options: */
- if (odp_cunit_parse_options(argc, argv))
- return -1;
-
- ret = odp_cunit_register(time_suites);
-
- if (ret == 0)
- ret = odp_cunit_run();
-
- return ret;
-}