1 /*
2 * Arm SCP/MCP Software
3 * Copyright (c) 2015-2021, Arm Limited and Contributors. All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8 #include <fwk_assert.h>
9 #include <fwk_id.h>
10 #include <fwk_macros.h>
11 #include <fwk_test.h>
12
test_overlapping_fields(void)13 static void test_overlapping_fields(void)
14 {
15 fwk_id_t id = FWK_ID_MODULE_INIT(42);
16
17 assert(id.common.type == id.element.type);
18 assert(id.common.type == id.api.type);
19 assert(id.common.type == id.event.type);
20 assert(id.common.type == id.notification.type);
21 assert(id.common.module_idx == id.element.module_idx);
22 assert(id.common.module_idx == id.api.module_idx);
23 assert(id.common.module_idx == id.event.module_idx);
24 assert(id.common.module_idx == id.notification.module_idx);
25 }
26
test_build_module(void)27 static void test_build_module(void)
28 {
29 fwk_id_t id = FWK_ID_MODULE_INIT(42);
30
31 assert(id.common.type == __FWK_ID_TYPE_MODULE);
32 assert(id.common.module_idx == 42);
33
34 assert(fwk_id_is_equal(id, FWK_ID_MODULE(42)));
35 }
36
test_build_element(void)37 static void test_build_element(void)
38 {
39 fwk_id_t id = FWK_ID_ELEMENT_INIT(42, 58);
40
41 assert(id.element.type == __FWK_ID_TYPE_ELEMENT);
42 assert(id.element.module_idx == 42);
43 assert(id.element.element_idx == 58);
44
45 assert(fwk_id_is_equal(id, FWK_ID_ELEMENT(42, 58)));
46 }
47
test_build_api(void)48 static void test_build_api(void)
49 {
50 fwk_id_t id = FWK_ID_API_INIT(42, 14);
51
52 assert(id.api.type == __FWK_ID_TYPE_API);
53 assert(id.api.module_idx == 42);
54 assert(id.api.api_idx == 14);
55
56 assert(fwk_id_is_equal(id, FWK_ID_API(42, 14)));
57 }
58
test_build_event(void)59 static void test_build_event(void)
60 {
61 fwk_id_t id = FWK_ID_EVENT_INIT(42, 56);
62
63 assert(id.event.type == __FWK_ID_TYPE_EVENT);
64 assert(id.event.module_idx == 42);
65 assert(id.event.event_idx == 56);
66
67 assert(fwk_id_is_equal(id, FWK_ID_EVENT(42, 56)));
68 }
69
test_build_notification(void)70 static void test_build_notification(void)
71 {
72 fwk_id_t id = FWK_ID_NOTIFICATION_INIT(42, 56);
73
74 assert(id.event.type == __FWK_ID_TYPE_NOTIFICATION);
75 assert(id.notification.module_idx == 42);
76 assert(id.notification.notification_idx == 56);
77
78 assert(fwk_id_is_equal(id, FWK_ID_NOTIFICATION(42, 56)));
79 }
80
test_module_from_module(void)81 static void test_module_from_module(void)
82 {
83 fwk_id_t id = FWK_ID_MODULE_INIT(42);
84 fwk_id_t parent_id = fwk_id_build_module_id(id);
85
86 assert(parent_id.common.type == __FWK_ID_TYPE_MODULE);
87 assert(parent_id.common.module_idx == 42);
88
89 assert(fwk_id_is_equal(id, FWK_ID_MODULE(42)));
90 }
91
test_module_from_element(void)92 static void test_module_from_element(void)
93 {
94 fwk_id_t id = FWK_ID_ELEMENT_INIT(42, 58);
95 fwk_id_t parent_id = fwk_id_build_module_id(id);
96
97 assert(parent_id.common.type == __FWK_ID_TYPE_MODULE);
98 assert(parent_id.common.module_idx == 42);
99
100 assert(fwk_id_is_equal(id, FWK_ID_ELEMENT(42, 58)));
101 }
102
test_element_from_module_and_index(void)103 static void test_element_from_module_and_index(void)
104 {
105 fwk_id_t id = FWK_ID_MODULE_INIT(42);
106 fwk_id_t element_id = fwk_id_build_element_id(id, 58);
107
108 assert(fwk_id_is_equal(element_id, FWK_ID_ELEMENT(42, 58)));
109 }
110
test_element_from_element_and_index(void)111 static void test_element_from_element_and_index(void)
112 {
113 fwk_id_t id = FWK_ID_ELEMENT_INIT(42, 64);
114 fwk_id_t element_id = fwk_id_build_element_id(id, 58);
115
116 assert(fwk_id_is_equal(element_id, FWK_ID_ELEMENT(42, 58)));
117 }
118
test_sub_element_from_element_and_index(void)119 static void test_sub_element_from_element_and_index(void)
120 {
121 fwk_id_t element_id = FWK_ID_ELEMENT_INIT(42, 64);
122 fwk_id_t sub_element_id = fwk_id_build_sub_element_id(element_id, 58);
123
124 assert(fwk_id_is_equal(sub_element_id, FWK_ID_SUB_ELEMENT(42, 64, 58)));
125 }
126
127 static const struct fwk_test_case_desc test_case_table[] = {
128 FWK_TEST_CASE(test_overlapping_fields),
129 FWK_TEST_CASE(test_build_module),
130 FWK_TEST_CASE(test_build_element),
131 FWK_TEST_CASE(test_build_api),
132 FWK_TEST_CASE(test_build_event),
133 FWK_TEST_CASE(test_build_notification),
134 FWK_TEST_CASE(test_module_from_module),
135 FWK_TEST_CASE(test_module_from_element),
136 FWK_TEST_CASE(test_element_from_module_and_index),
137 FWK_TEST_CASE(test_element_from_element_and_index),
138 FWK_TEST_CASE(test_sub_element_from_element_and_index),
139 };
140
141 struct fwk_test_suite_desc test_suite = {
142 .name = "fwk_id_build",
143 .test_case_count = FWK_ARRAY_SIZE(test_case_table),
144 .test_case_table = test_case_table,
145 };
146