diff --git a/storm/Big.cpp b/storm/Big.cpp index 4a3cc70..12b3234 100644 --- a/storm/Big.cpp +++ b/storm/Big.cpp @@ -56,6 +56,10 @@ void SBigFromUnsigned(BigData* num, uint32_t val) { FromUnsigned(num->Primary(), val); } +void SBigInc(BigData* a, BigData* b) { + Add(a->Primary(), b->Primary(), 1); +} + void SBigMod(BigData* a, BigData* b, BigData* c) { uint32_t allocCount = 0; auto& scratch = a->Stack().Alloc(&allocCount); diff --git a/storm/Big.hpp b/storm/Big.hpp index 027368e..eb9281c 100644 --- a/storm/Big.hpp +++ b/storm/Big.hpp @@ -24,6 +24,8 @@ void SBigFromStr(BigData* num, const char* str); void SBigFromUnsigned(BigData* num, uint32_t val); +void SBigInc(BigData* a, BigData* b); + void SBigMod(BigData* a, BigData* b, BigData* c); void SBigMul(BigData* a, BigData* b, BigData* c); diff --git a/test/Big.cpp b/test/Big.cpp index 03b94c4..fdd0776 100644 --- a/test/Big.cpp +++ b/test/Big.cpp @@ -330,6 +330,37 @@ TEST_CASE("SBigFromUnsigned", "[big]") { SBigDel(num); } } +TEST_CASE("SBigInc", "[big]") { + BigDataTest a, b; + + SECTION("increments from 0") { + SBigFromUnsigned(b, 0); + + SBigInc(a, b); + + CHECK(a->Primary().Count() == 1); + CHECK(a->Primary()[0] == 1); + } + + SECTION("increments from max uint") { + SBigFromUnsigned(b, UINT32_MAX); + + SBigInc(a, b); + + CHECK(a->Primary().Count() == 2); + CHECK(a->Primary()[0] == 0); + CHECK(a->Primary()[1] == 1); + } + + SECTION("increments from a number") { + SBigFromUnsigned(b, 1337); + + SBigInc(a, b); + + CHECK(a->Primary().Count() == 1); + CHECK(a->Primary()[0] == 1338); + } +} TEST_CASE("SBigMod", "[big]") { SECTION("mods 7 by 4") {