mirror of
https://github.com/thunderbrewhq/squall.git
synced 2025-12-12 02:22:30 +00:00
feat(big): add SBigFromStr
This commit is contained in:
parent
fac094793a
commit
896c3c0414
5 changed files with 42 additions and 0 deletions
|
|
@ -48,6 +48,10 @@ void SBigFromBinary(BigData* num, const void* data, uint32_t bytes) {
|
|||
FromBinary(num->Primary(), data, bytes);
|
||||
}
|
||||
|
||||
void SBigFromStr(BigData* num, const char *str) {
|
||||
FromStr(num->Primary(), str);
|
||||
}
|
||||
|
||||
void SBigFromUnsigned(BigData* num, uint32_t val) {
|
||||
FromUnsigned(num->Primary(), val);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ void SBigDel(BigData* num);
|
|||
|
||||
void SBigFromBinary(BigData* num, const void* data, uint32_t bytes);
|
||||
|
||||
void SBigFromStr(BigData* num, const char* str);
|
||||
|
||||
void SBigFromUnsigned(BigData* num, uint32_t val);
|
||||
|
||||
void SBigMod(BigData* a, BigData* b, BigData* c);
|
||||
|
|
|
|||
|
|
@ -167,6 +167,14 @@ void FromBinary(BigBuffer& buffer, const void* data, uint32_t bytes) {
|
|||
}
|
||||
}
|
||||
|
||||
void FromStr(BigBuffer& buffer, const char* str) {
|
||||
SetZero(buffer);
|
||||
for (; *str; str++) {
|
||||
Mul(buffer, buffer, 10);
|
||||
Add(buffer, buffer, *str - '0');
|
||||
}
|
||||
}
|
||||
|
||||
void FromUnsigned(BigBuffer& buffer, uint32_t value) {
|
||||
buffer[0] = value;
|
||||
buffer.SetCount(1);
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ uint32_t ExtractLowPartSx(uint64_t& value);
|
|||
|
||||
void FromBinary(BigBuffer& buffer, const void* value, uint32_t bytes);
|
||||
|
||||
void FromStr(BigBuffer& buffer, const char* str);
|
||||
|
||||
void FromUnsigned(BigBuffer& buffer, uint32_t value);
|
||||
|
||||
uint32_t HighBitPos(const BigBuffer& buffer);
|
||||
|
|
|
|||
26
test/Big.cpp
26
test/Big.cpp
|
|
@ -281,6 +281,32 @@ TEST_CASE("SBigFromBinary", "[big]") {
|
|||
}
|
||||
}
|
||||
|
||||
TEST_CASE("SBigFromStr", "[big]") {
|
||||
BigDataTest num;
|
||||
|
||||
SECTION("with empty string") {
|
||||
SBigFromStr(num, "");
|
||||
|
||||
CHECK(num->Primary().Count() == 0);
|
||||
}
|
||||
|
||||
SECTION("with string containing numbers") {
|
||||
SBigFromStr(num, "123456");
|
||||
|
||||
CHECK(num->Primary().Count() == 1);
|
||||
CHECK(num->Primary()[0] == 123456);
|
||||
}
|
||||
|
||||
SECTION("with string containing letters (original bug)") {
|
||||
SBigFromStr(num, "ABC");
|
||||
|
||||
const unsigned int expected_num = ('A' - '0') * 100 + ('B' - '0') * 10 + ('C' - '0');
|
||||
|
||||
CHECK(num->Primary().Count() == 1);
|
||||
CHECK(num->Primary()[0] == expected_num);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("SBigFromUnsigned", "[big]") {
|
||||
SECTION("creates bigdata from 0") {
|
||||
BigData* num;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue