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);
|
FromBinary(num->Primary(), data, bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SBigFromStr(BigData* num, const char *str) {
|
||||||
|
FromStr(num->Primary(), str);
|
||||||
|
}
|
||||||
|
|
||||||
void SBigFromUnsigned(BigData* num, uint32_t val) {
|
void SBigFromUnsigned(BigData* num, uint32_t val) {
|
||||||
FromUnsigned(num->Primary(), val);
|
FromUnsigned(num->Primary(), val);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,8 @@ void SBigDel(BigData* num);
|
||||||
|
|
||||||
void SBigFromBinary(BigData* num, const void* data, uint32_t bytes);
|
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 SBigFromUnsigned(BigData* num, uint32_t val);
|
||||||
|
|
||||||
void SBigMod(BigData* a, BigData* b, BigData* c);
|
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) {
|
void FromUnsigned(BigBuffer& buffer, uint32_t value) {
|
||||||
buffer[0] = value;
|
buffer[0] = value;
|
||||||
buffer.SetCount(1);
|
buffer.SetCount(1);
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,8 @@ uint32_t ExtractLowPartSx(uint64_t& value);
|
||||||
|
|
||||||
void FromBinary(BigBuffer& buffer, const void* value, uint32_t bytes);
|
void FromBinary(BigBuffer& buffer, const void* value, uint32_t bytes);
|
||||||
|
|
||||||
|
void FromStr(BigBuffer& buffer, const char* str);
|
||||||
|
|
||||||
void FromUnsigned(BigBuffer& buffer, uint32_t value);
|
void FromUnsigned(BigBuffer& buffer, uint32_t value);
|
||||||
|
|
||||||
uint32_t HighBitPos(const BigBuffer& buffer);
|
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]") {
|
TEST_CASE("SBigFromUnsigned", "[big]") {
|
||||||
SECTION("creates bigdata from 0") {
|
SECTION("creates bigdata from 0") {
|
||||||
BigData* num;
|
BigData* num;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue