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