1 /*
2 * Copyright (c) 2024 Keith Packard
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 #include <zephyr/kernel.h>
8 #include <errno.h>
9 #include <zephyr/tc_util.h>
10 #include <zephyr/ztest.h>
11
12 /**
13 * @defgroup kernel_constructor_tests Constructors
14 * @ingroup all_tests
15 * @{
16 * @}
17 *
18 * @addtogroup kernel_constructor_tests
19 * @{
20 */
21
22 static int constructor_number;
23 static int constructor_values[3];
24
__constructor_init(void)25 void __attribute__((__constructor__)) __constructor_init(void)
26 {
27 constructor_values[constructor_number++] = 31415;
28 }
29
__constructor_init_priority_101(void)30 void __attribute__((__constructor__(101))) __constructor_init_priority_101(void)
31 {
32 constructor_values[constructor_number++] = 101;
33 }
34
__constructor_init_priority_1000(void)35 void __attribute__((__constructor__(1000))) __constructor_init_priority_1000(void)
36 {
37 constructor_values[constructor_number++] = 1000;
38 }
39 /**
40 * @brief Test if constructors work
41 *
42 */
ZTEST(constructor,test_constructor)43 ZTEST(constructor, test_constructor)
44 {
45 zassert_equal(constructor_number, 3,
46 "constructor test failed: constructor missing");
47 zassert_equal(constructor_values[0], 101,
48 "constructor priority test failed:"
49 "constructor 101 not called first");
50 zassert_equal(constructor_values[1], 1000,
51 "constructor priority test failed:"
52 "constructor 1000 not called second");
53 zassert_equal(constructor_values[2], 31415,
54 "constructor priority test failed:"
55 "constructor without priority not called last");
56 }
57
58 /**
59 * @}
60 */
61
62 extern void *common_setup(void);
63 ZTEST_SUITE(constructor, NULL, common_setup, NULL, NULL, NULL);
64