@@ -13,7 +13,8 @@ enum class bitmask_flags : unsigned {
1313 flag_a = 1u << 0 ,
1414 flag_b = 1u << 1 ,
1515 flag_c = 1u << 2 ,
16- all = flag_a | flag_b | flag_c
16+ flag_d = 1u << 3 ,
17+ all = flag_a | flag_b | flag_c | flag_d
1718};
1819
1920enum class permissions : unsigned {
@@ -180,20 +181,24 @@ TEST_CASE("Bitmask: assignment operators") {
180181
181182TEST_CASE (" Bitmask: clear_least_set" ) {
182183 auto result = bitmask_flags::flag_c | bitmask_flags::flag_b;
183- CHECK (bitmask_flags::flag_c == clear_least_set (result));
184+ CHECK (bitmask_flags::flag_c == (result & (result - 1 ) ));
184185
185186 auto perm_result = permissions::read | permissions::write;
186- CHECK (permissions::write == clear_least_set (perm_result));
187+ CHECK (permissions::write == (perm_result & (perm_result - 1 ) ));
187188}
188189
189190TEST_CASE (" Bitmask: least_set" ) {
190191 auto result = bitmask_flags::flag_c | bitmask_flags::flag_b;
191- CHECK (bitmask_flags::flag_b == least_set ( result));
192+ CHECK (bitmask_flags::flag_b == (result & - result));
192193
193194 auto perm_result = permissions::read | permissions::write;
194- CHECK (permissions::read == least_set ( perm_result));
195+ CHECK (permissions::read == (perm_result & - perm_result));
195196}
196197
198+ TEST_CASE (" Bitmask: clear_trailing_set" ) {
199+ auto result = bitmask_flags::flag_d | bitmask_flags::flag_b | bitmask_flags::flag_a;
200+ CHECK (bitmask_flags::flag_d == (result & (result + 1 )));
201+ }
197202/* *************************************************************************************************/
198203// ARITHMETIC OPERATIONS TESTS
199204
0 commit comments