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