fix bug in find_next of (new) bitset class (#618)

This commit is contained in:
Chiraffollo 2022-10-05 13:20:36 +02:00 committed by GitHub
parent ed91987454
commit 29792fb1f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 58 additions and 1 deletions

View File

@ -507,7 +507,7 @@ namespace etl
{
// Where to start.
size_t index = position >> log2<Bits_Per_Element>::value;
size_t bit = position;
size_t bit = position & (Bits_Per_Element - 1);
element_type mask = 1 << bit;

View File

@ -1246,6 +1246,22 @@ namespace
CHECK_EQUAL(etl::ibitset::npos, bits24.find_next(true, 13));
}
//*************************************************************************
TEST(test_find_next_github_issue_617)
{
etl::bitset<64> bs1(0xC000'0000'0000'0031ULL);
size_t bs1fnt1 = bs1.find_next(true, 10);
size_t bs1fnt2 = bs1.find_next(true, 59);
CHECK_EQUAL(62U, bs1fnt1);
CHECK_EQUAL(62U, bs1fnt2);
etl::bitset<64> bs2(0x3FFF'FFFF'FFFF'FFCEULL);
size_t bs2fnf1 = bs2.find_next(false, 10);
size_t bs2fnf2 = bs2.find_next(false, 59);
CHECK_EQUAL(62U, bs2fnf1);
CHECK_EQUAL(62U, bs2fnf2);
}
//*************************************************************************
TEST(test_swap)
{

View File

@ -1952,6 +1952,28 @@ namespace
CHECK_EQUAL(4U, bs4fnt1);
}
//*************************************************************************
TEST(test_find_next_github_issue_617)
{
constexpr etl::bitset<64> bs1(ull(0xC000'0000'0000'0031));
constexpr size_t bs1fnt1 = bs1.find_next(true, 10);
constexpr size_t bs1fnt2 = bs1.find_next(true, 59);
CHECK_EQUAL(62U, bs1fnt1);
CHECK_EQUAL(62U, bs1fnt2);
constexpr etl::bitset<64> bs2(ull(0x3FFF'FFFF'FFFF'FFCE));
constexpr size_t bs2fnf1 = bs2.find_next(false, 10);
constexpr size_t bs2fnf2 = bs2.find_next(false, 59);
CHECK_EQUAL(62U, bs2fnf1);
CHECK_EQUAL(62U, bs2fnf2);
constexpr etl::bitset<64, uint32_t> bs32(ull(0xC000'0000'0000'0031));
constexpr size_t bs32fnt1 = bs32.find_next(true, 10);
constexpr size_t bs32fnt2 = bs32.find_next(true, 59);
CHECK_EQUAL(62U, bs32fnt1);
CHECK_EQUAL(62U, bs32fnt2);
}
//*************************************************************************
//*************************************************************************
TEST(test_swap)

View File

@ -1796,6 +1796,25 @@ namespace
CHECK_EQUAL(4U, bs4fnt1);
}
//*************************************************************************
TEST(test_find_next_github_issue_617)
{
etl::bitset_ext<64>::element_type buffer1[etl::bitset_ext<64>::Number_Of_Elements];
etl::bitset_ext<64>::element_type buffer2[etl::bitset_ext<64>::Number_Of_Elements];
etl::bitset_ext<64> bs1(ull(0xC000'0000'0000'0031), buffer1);
size_t bs1fnt1 = bs1.find_next(true, 10);
size_t bs1fnt2 = bs1.find_next(true, 59);
CHECK_EQUAL(62U, bs1fnt1);
CHECK_EQUAL(62U, bs1fnt2);
etl::bitset_ext<64> bs2(ull(0x3FFF'FFFF'FFFF'FFCE), buffer2);
size_t bs2fnf1 = bs2.find_next(false, 10);
size_t bs2fnf2 = bs2.find_next(false, 59);
CHECK_EQUAL(62U, bs2fnf1);
CHECK_EQUAL(62U, bs2fnf2);
}
//*************************************************************************
TEST(test_swap)
{