/*
 * Copyright (c) 2021 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <ztest.h>
#include <busy_sim.h>

static void test_busy_sim(void)
{
	uint32_t ms = 1000;
	uint32_t delta = 80;
	uint32_t busy_ms;
	uint32_t t = k_uptime_get_32();

	k_busy_wait(1000 * ms);
	t = k_uptime_get_32() - t;

	zassert_true((t > (ms - delta)) && (t < (ms + delta)), NULL);

	/* Start busy simulator and check that k_busy_wait last longer */
	t = k_uptime_get_32();
	busy_sim_start(500, 200, 1000, 400);
	k_busy_wait(1000 * ms);
	t = k_uptime_get_32() - t;
	busy_ms = (3 * ms) / 2;

	busy_sim_stop();
	/* due to clock imprecision, randomness and addtional cpu load overhead
	 * expected time range is increased.
	 */
	zassert_true((t > (busy_ms - 2 * delta)) && (t < (busy_ms + 4 * delta)),
			"expected in range: %d-%d, k_busy_wait lasted %d",
			busy_ms - 2 * delta, busy_ms + 4 * delta,  t);

	/* Check that k_busy_wait is not interrupted after busy_sim_stop. */
	t = k_uptime_get_32();
	k_busy_wait(1000 * ms);
	t = k_uptime_get_32() - t;
	zassert_true((t > (ms - delta)) && (t < (ms + delta)), NULL);
}

void test_main(void)
{
	ztest_test_suite(busy_sim_tests,
			 ztest_unit_test(test_busy_sim)
			 );

	ztest_run_test_suite(busy_sim_tests);
}
