mirror of
https://github.com/thunderbrewhq/squall.git
synced 2026-02-04 00:49:08 +00:00
feat(big): add SBigToUnsigned
This commit is contained in:
parent
208dd8a2a5
commit
aaa44dd400
6 changed files with 37 additions and 1 deletions
|
|
@ -143,6 +143,10 @@ void SBigToBinaryBuffer(BigData* num, uint8_t* data, uint32_t maxBytes, uint32_t
|
|||
}
|
||||
}
|
||||
|
||||
void SBigToUnsigned(BigData* num, uint32_t* val) {
|
||||
ToUnsigned(val, num->Primary());
|
||||
}
|
||||
|
||||
void SBigXor(BigData* a, BigData* b, BigData* c) {
|
||||
Xor(a->Primary(), b->Primary(), c->Primary());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,4 +60,6 @@ void SBigToBinaryBuffer(BigData* num, uint8_t* data, uint32_t maxBytes, uint32_t
|
|||
|
||||
void SBigXor(BigData* a, BigData* b, BigData* c);
|
||||
|
||||
void SBigToUnsigned(BigData* num, uint32_t* val);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -483,6 +483,11 @@ void ToStream(TSGrowableArray<uint8_t>& output, const BigBuffer& buffer) {
|
|||
ToBinaryAppend(output, buffer);
|
||||
}
|
||||
|
||||
void ToUnsigned(uint32_t* a, const BigBuffer& b) {
|
||||
*a = 0;
|
||||
*a = b[0];
|
||||
}
|
||||
|
||||
void Xor(BigBuffer& a, const BigBuffer& b, const BigBuffer& c) {
|
||||
uint32_t i = 0;
|
||||
for (; b.IsUsed(i) || c.IsUsed(i); i++) {
|
||||
|
|
|
|||
|
|
@ -75,6 +75,8 @@ void ToBinary(TSGrowableArray<uint8_t>& output, const BigBuffer& buffer);
|
|||
|
||||
void ToStream(TSGrowableArray<uint8_t>& output, const BigBuffer& buffer);
|
||||
|
||||
void ToUnsigned(uint32_t* a, const BigBuffer& b);
|
||||
|
||||
void Xor(BigBuffer& a, const BigBuffer& b, const BigBuffer& c);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
24
test/Big.cpp
24
test/Big.cpp
|
|
@ -746,6 +746,30 @@ TEST_CASE("SBigToBinaryBuffer", "[big]") {
|
|||
}
|
||||
}
|
||||
|
||||
TEST_CASE("SBigToUnsigned", "[big]") {
|
||||
BigDataTest num;
|
||||
|
||||
SECTION("converts bignum values to uint") {
|
||||
auto v = GENERATE(0UL, 1UL, 1000UL, UINT32_MAX);
|
||||
|
||||
SBigFromUnsigned(num, v);
|
||||
|
||||
uint32_t result;
|
||||
SBigToUnsigned(num, &result);
|
||||
|
||||
CHECK(result == v);
|
||||
}
|
||||
|
||||
SECTION("truncates large values") {
|
||||
SBigFromStr(num, std::to_string(0x123456789ABCDEFULL).c_str());
|
||||
|
||||
uint32_t result;
|
||||
SBigToUnsigned(num, &result);
|
||||
|
||||
CHECK(result == 0x89ABCDEF);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("SBigXor", "[big]") {
|
||||
BigDataTest a, b, c;
|
||||
|
||||
|
|
|
|||
|
|
@ -1070,7 +1070,6 @@ TEST_CASE("Sub", "[big]") {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
TEST_CASE("ToStream", "[big]") {
|
||||
BigDataTest a;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue