blob: c842f586f2cd52bd5acafb52a779a378b132ab3f [file] [log] [blame]
/*
* Copyright (c) 2018 Oticon A/S
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "soc.h"
#include "kernel.h"
#include "posix_board_if.h"
/**
* @brief Test NATIVE_TASK hook for native builds
*
* Verify that the NATIVE_TASK hooks are registered and called.
* Note that the ztest framework cannot be used as we are testing
* functionality which executes before and after all Zephyr threads have been
* terminated.
*/
static void test_check(int hook)
{
static int call_nbr;
static int failed;
static int expected_order[8] = {1, 2, 3, 8, 6, 5, 4, 7};
if (failed) {
return;
}
posix_print_trace("test_hook%i called\n", hook);
if (expected_order[call_nbr] != hook) {
failed = 1;
posix_print_trace("PROJECT EXECUTION FAILED\n");
}
if (call_nbr++ == 7) {
posix_print_trace("PROJECT EXECUTION SUCCESSFUL\n");
}
}
#define TEST_HOOK(n) \
static void test_hook##n(void) \
{ \
test_check(n); \
}
TEST_HOOK(1);
TEST_HOOK(2);
TEST_HOOK(3);
TEST_HOOK(4);
TEST_HOOK(5);
TEST_HOOK(6);
TEST_HOOK(7);
TEST_HOOK(8);
NATIVE_TASK(test_hook1, PRE_BOOT_1, 1);
NATIVE_TASK(test_hook2, PRE_BOOT_2, 200);
NATIVE_TASK(test_hook3, PRE_BOOT_3, 20);
NATIVE_TASK(test_hook8, FIRST_SLEEP, 5);
NATIVE_TASK(test_hook4, ON_EXIT, 200);
NATIVE_TASK(test_hook5, ON_EXIT, 20);
NATIVE_TASK(test_hook6, ON_EXIT, 1);
NATIVE_TASK(test_hook7, ON_EXIT, 310);
void main(void)
{
k_sleep(K_MSEC(100));
posix_exit(0);
}