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) {
|
void SBigXor(BigData* a, BigData* b, BigData* c) {
|
||||||
Xor(a->Primary(), b->Primary(), c->Primary());
|
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 SBigXor(BigData* a, BigData* b, BigData* c);
|
||||||
|
|
||||||
|
void SBigToUnsigned(BigData* num, uint32_t* val);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -483,6 +483,11 @@ void ToStream(TSGrowableArray<uint8_t>& output, const BigBuffer& buffer) {
|
||||||
ToBinaryAppend(output, 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) {
|
void Xor(BigBuffer& a, const BigBuffer& b, const BigBuffer& c) {
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
for (; b.IsUsed(i) || c.IsUsed(i); i++) {
|
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 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);
|
void Xor(BigBuffer& a, const BigBuffer& b, const BigBuffer& c);
|
||||||
|
|
||||||
#endif
|
#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]") {
|
TEST_CASE("SBigXor", "[big]") {
|
||||||
BigDataTest a, b, c;
|
BigDataTest a, b, c;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1070,7 +1070,6 @@ TEST_CASE("Sub", "[big]") {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TEST_CASE("ToStream", "[big]") {
|
TEST_CASE("ToStream", "[big]") {
|
||||||
BigDataTest a;
|
BigDataTest a;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue