@@ -110,13 +110,95 @@ FOSSIL_TEST(c_test_bitwise_lookup) {
110110 ASSUME_ITS_EQUAL_I32 (bit , 0x4 );
111111}
112112
113+ // ** Test fossil_sys_bitwise_all Function **
114+ FOSSIL_TEST (c_test_bitwise_all ) {
115+ fossil_sys_bitwise_entry_t entries [] = {
116+ {"read" , 0x1 },
117+ {"write" , 0x2 },
118+ {"execute" , 0x4 },
119+ {NULL , 0 }
120+ };
121+ const fossil_sys_bitwise_table_t table = {entries , sizeof (entries ) / sizeof (entries [0 ]) - 1 };
122+
123+ uint64_t mask = fossil_sys_bitwise_all (& table );
124+ ASSUME_ITS_EQUAL_I32 (mask , 0x7 ); // 0x1 | 0x2 | 0x4
125+ }
126+
127+ // ** Test fossil_sys_bitwise_validate Function **
128+ FOSSIL_TEST (c_test_bitwise_validate ) {
129+ fossil_sys_bitwise_entry_t entries [] = {
130+ {"read" , 0x1 },
131+ {"write" , 0x2 },
132+ {"execute" , 0x4 },
133+ {NULL , 0 }
134+ };
135+ const fossil_sys_bitwise_table_t table = {entries , sizeof (entries ) / sizeof (entries [0 ]) - 1 };
136+
137+ // Known good mask
138+ int status = fossil_sys_bitwise_validate (0x3 , & table );
139+ ASSUME_ITS_EQUAL_I32 (status , 0 );
140+
141+ // Mask with an unknown bit set (0x8)
142+ status = fossil_sys_bitwise_validate (0x8 , & table );
143+ ASSUME_ITS_NOTEQUAL_I32 (status , 0 ); // Expect failure
144+ }
145+
146+ // ** Test fossil_sys_bitwise_name Function **
147+ FOSSIL_TEST (c_test_bitwise_name ) {
148+ fossil_sys_bitwise_entry_t entries [] = {
149+ {"read" , 0x1 },
150+ {"write" , 0x2 },
151+ {"execute" , 0x4 },
152+ {NULL , 0 }
153+ };
154+ const fossil_sys_bitwise_table_t table = {entries , sizeof (entries ) / sizeof (entries [0 ]) - 1 };
155+
156+ const char * name = fossil_sys_bitwise_name (0x1 , & table );
157+ ASSUME_ITS_EQUAL_CSTR (name , "read" );
158+
159+ name = fossil_sys_bitwise_name (0x4 , & table );
160+ ASSUME_ITS_EQUAL_CSTR (name , "execute" );
161+
162+ name = fossil_sys_bitwise_name (0x8 , & table );
163+ ASSUME_ITS_NULL (name ); // 0x8 is not in the table
164+ }
165+
166+ // ** Test fossil_sys_bitwise_count Function **
167+ FOSSIL_TEST (c_test_bitwise_count ) {
168+ uint64_t mask = 0x7 ; // 3 bits set
169+ size_t count = fossil_sys_bitwise_count (mask );
170+ ASSUME_ITS_EQUAL_I32 (count , 3 );
171+
172+ mask = 0x0 ;
173+ count = fossil_sys_bitwise_count (mask );
174+ ASSUME_ITS_EQUAL_I32 (count , 0 );
175+
176+ mask = 0xFFFFFFFFFFFFFFFFULL ;
177+ count = fossil_sys_bitwise_count (mask );
178+ ASSUME_ITS_EQUAL_I32 (count , 64 );
179+ }
180+
181+ // ** Test fossil_sys_bitwise_has Function **
182+ FOSSIL_TEST (c_test_bitwise_has ) {
183+ uint64_t mask = 0x5 ; // bits 0 and 2 set
184+
185+ ASSUME_ITS_TRUE (fossil_sys_bitwise_has (mask , 0x1 )); // bit 0 set
186+ ASSUME_ITS_FALSE (fossil_sys_bitwise_has (mask , 0x2 )); // bit 1 NOT set
187+ ASSUME_ITS_TRUE (fossil_sys_bitwise_has (mask , 0x4 )); // bit 2 set
188+ }
189+
113190// * * * * * * * * * * * * * * * * * * * * * * * *
114191// * Fossil Logic Test Pool
115192// * * * * * * * * * * * * * * * * * * * * * * * *
116193FOSSIL_TEST_GROUP (c_bitwise_tests ) {
117194 FOSSIL_TEST_ADD (c_bitwise_suite , c_test_bitwise_parse );
118195 FOSSIL_TEST_ADD (c_bitwise_suite , c_test_bitwise_format );
119196 FOSSIL_TEST_ADD (c_bitwise_suite , c_test_bitwise_lookup );
197+ FOSSIL_TEST_ADD (c_bitwise_suite , c_test_bitwise_all );
198+ FOSSIL_TEST_ADD (c_bitwise_suite , c_test_bitwise_validate );
199+ FOSSIL_TEST_ADD (c_bitwise_suite , c_test_bitwise_name );
200+ FOSSIL_TEST_ADD (c_bitwise_suite , c_test_bitwise_count );
201+ FOSSIL_TEST_ADD (c_bitwise_suite , c_test_bitwise_has );
120202
121203 FOSSIL_TEST_REGISTER (c_bitwise_suite );
122204}
0 commit comments