feat(big): add HighBitPos

This commit is contained in:
fallenoak 2023-02-01 21:08:15 -06:00
parent e9d3284c70
commit 6e62f0a604
No known key found for this signature in database
GPG key ID: 7628F8E61AEA070D
3 changed files with 92 additions and 0 deletions

View file

@ -200,6 +200,69 @@ TEST_CASE("ExtractLowPartSx", "[big]") {
}
}
TEST_CASE("HighBitPos", "[big]") {
SECTION("returns position of high bit for 0") {
BigData* num;
SBigNew(&num);
SBigFromUnsigned(num, 0);
CHECK(HighBitPos(num->Primary()) == 0);
SBigDel(num);
}
SECTION("returns position of high bit for 0x1000") {
BigData* num;
SBigNew(&num);
SBigFromUnsigned(num, 0x1000);
CHECK(HighBitPos(num->Primary()) == 12);
SBigDel(num);
}
SECTION("returns position of high bit for 0x1111") {
BigData* num;
SBigNew(&num);
SBigFromUnsigned(num, 0x1111);
CHECK(HighBitPos(num->Primary()) == 12);
SBigDel(num);
}
SECTION("returns position of high bit for 0xFFFF") {
BigData* num;
SBigNew(&num);
SBigFromUnsigned(num, 0xFFFF);
CHECK(HighBitPos(num->Primary()) == 15);
SBigDel(num);
}
SECTION("returns position of high bit for 0xFFFFFFFF") {
BigData* num;
SBigNew(&num);
SBigFromUnsigned(num, 0xFFFFFFFF);
CHECK(HighBitPos(num->Primary()) == 31);
SBigDel(num);
}
SECTION("returns position of high bit for 0x123456789ABCDEF0") {
BigData* num;
SBigNew(&num);
uint64_t data = 0x123456789ABCDEF0;
SBigFromBinary(num, reinterpret_cast<uint8_t*>(&data), sizeof(data));
CHECK(HighBitPos(num->Primary()) == 60);
SBigDel(num);
}
}
TEST_CASE("Mul", "[big]") {
SECTION("multiplies 0 and 1") {
BigData* a;