| /* |
| * Copyright (c) 2019 Intel Corp. |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <drivers/counter.h> |
| #include <ztest.h> |
| #include <kernel.h> |
| |
| /* |
| * Basic test to ensure that the clock is ticking at roughly 1Hz. |
| */ |
| |
| #ifdef CONFIG_COUNTER_CMOS |
| #define DEVICE_LABEL "CMOS" |
| #else |
| #define DEVICE_LABEL DT_LABEL(DT_ALIAS(rtc_0)) |
| #endif |
| |
| #define DELAY_MS 1200 /* pause 1.2 seconds should always pass */ |
| #define MIN_BOUND 1 /* counter must report at least MIN_BOUND .. */ |
| #define MAX_BOUND 2 /* .. but at most MAX_BOUND seconds elapsed */ |
| |
| void test_seconds_rate(void) |
| { |
| const struct device *dev; |
| uint32_t start, elapsed; |
| int err; |
| |
| dev = device_get_binding(DEVICE_LABEL); |
| zassert_true(dev != NULL, "can't find counter device"); |
| |
| err = counter_get_value(dev, &start); |
| zassert_true(err == 0, "failed to read counter device"); |
| |
| k_msleep(DELAY_MS); |
| |
| err = counter_get_value(dev, &elapsed); |
| zassert_true(err == 0, "failed to read counter device"); |
| elapsed -= start; |
| |
| zassert_true(elapsed >= MIN_BOUND, "busted minimum bound"); |
| zassert_true(elapsed <= MAX_BOUND, "busted maximum bound"); |
| } |
| |
| void test_main(void) |
| { |
| ztest_test_suite(test_seconds_counter, ztest_unit_test(test_seconds_rate)); |
| ztest_run_test_suite(test_seconds_counter); |
| } |