zephyr/tests/kernel/timer/timer_monotonic/src/main.c
Punit Vara 1604a9351f tests: timer_monotonic: Migrate legacy test to ztest
Use ztest macros and apis in legacy test to support ztest
framework.

Signed-off-by: Punit Vara <punit.vara@intel.com>
2017-11-14 09:50:12 -08:00

76 lines
1.5 KiB
C

/*
* Copyright (c) 2017 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr.h>
#include <tc_util.h>
#include <ztest.h>
int test_frequency(void)
{
u32_t start, end, delta, pct;
TC_PRINT("Testing system tick frequency\n");
start = k_cycle_get_32();
k_sleep(1000);
end = k_cycle_get_32();
delta = end - start;
pct = (u64_t)delta * 100 / sys_clock_hw_cycles_per_sec;
printk("delta: %u expected: %u %u%%\n", delta,
sys_clock_hw_cycles_per_sec, pct);
/* Heuristic: if we're more than 10% off, throw an error */
if (pct < 90 || pct > 110) {
TC_PRINT("Clock calibration is way off!\n");
return -1;
}
return 0;
}
void test_timer(void)
{
u32_t t_last, t_now, i, errors;
s32_t diff;
errors = 0;
TC_PRINT("sys_clock_us_per_tick = %d\n", sys_clock_us_per_tick);
TC_PRINT("sys_clock_hw_cycles_per_tick = %d\n",
sys_clock_hw_cycles_per_tick);
TC_PRINT("sys_clock_hw_cycles_per_sec = %d\n",
sys_clock_hw_cycles_per_sec);
TC_START("test monotonic timer");
t_last = k_cycle_get_32();
for (i = 0; i < 1000000; i++) {
t_now = k_cycle_get_32();
if (t_now < t_last) {
diff = t_now - t_last;
TC_PRINT("diff = %d (t_last = %u : t_now = %u);"
"i = %u\n", diff, t_last, t_now, i);
errors++;
}
t_last = t_now;
}
zassert_false(errors, "errors = %d\n", errors);
zassert_false(test_frequency(), "test frequency failed");
}
void test_main(void)
{
ztest_test_suite(test_timer_fn, ztest_unit_test(test_timer));
ztest_run_test_suite(test_timer_fn);
}