From 2b8cc51ad88e4ac4a41373d07ac12c21acf68237 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Wed, 1 Feb 2023 22:12:20 -0600 Subject: [PATCH] feat(big): add InsertLowPart --- storm/big/Ops.cpp | 4 ++++ storm/big/Ops.hpp | 2 ++ test/Big.cpp | 26 ++++++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/storm/big/Ops.cpp b/storm/big/Ops.cpp index 01418a4..4409e8a 100644 --- a/storm/big/Ops.cpp +++ b/storm/big/Ops.cpp @@ -95,6 +95,10 @@ uint32_t HighBitPos(const BigBuffer& buffer) { return 0; } +void InsertLowPart(uint64_t& value, uint32_t low) { + value = (value << 32) | low; +} + uint64_t MakeLarge(uint32_t low, uint32_t high) { return low + (static_cast(high) << 32); } diff --git a/storm/big/Ops.hpp b/storm/big/Ops.hpp index ca8d683..3a2194e 100644 --- a/storm/big/Ops.hpp +++ b/storm/big/Ops.hpp @@ -21,6 +21,8 @@ void FromUnsigned(BigBuffer& buffer, uint32_t value); uint32_t HighBitPos(const BigBuffer& a); +void InsertLowPart(uint64_t& value, uint32_t low); + uint64_t MakeLarge(uint32_t low, uint32_t high); void Mul(BigBuffer& a, const BigBuffer& b, uint64_t c); diff --git a/test/Big.cpp b/test/Big.cpp index 0b5e6ba..9ebce01 100644 --- a/test/Big.cpp +++ b/test/Big.cpp @@ -263,6 +263,32 @@ TEST_CASE("HighBitPos", "[big]") { } } +TEST_CASE("InsertLowPart", "[big]") { + SECTION("inserts low part 0xABCD1111 into value 0") { + uint64_t value = 0; + uint32_t low = 0xABCD1111; + InsertLowPart(value, low); + + CHECK(value == 0xABCD1111); + } + + SECTION("inserts low part 0xABCD1111 into value 0xCCCCCCCC") { + uint64_t value = 0xCCCCCCCC; + uint32_t low = 0xABCD1111; + InsertLowPart(value, low); + + CHECK(value == 0xCCCCCCCCABCD1111); + } + + SECTION("inserts low part 0x12345678 into value 0xA0B1C2D3E4F5A6B7") { + uint64_t value = 0xA0B1C2D3E4F5A6B7; + uint32_t low = 0x12345678; + InsertLowPart(value, low); + + CHECK(value == 0xE4F5A6B712345678); + } +} + TEST_CASE("Mul", "[big]") { SECTION("multiplies 0 and 1") { BigData* a;