#include "storm/Big.hpp" #include "storm/big/Ops.hpp" #include "test/Test.hpp" TEST_CASE("ExtractLowPart", "[big]") { SECTION("extracts low part of 0") { uint64_t value = 0; auto low = ExtractLowPart(value); REQUIRE(low == 0); REQUIRE(value == 0); } SECTION("extracts low part of 0x12345678") { uint64_t value = 0x12345678; auto low = ExtractLowPart(value); REQUIRE(low == 0x12345678); REQUIRE(value == 0); } SECTION("extracts low part of 0xAAAABBBBCCCCDDDD") { uint64_t value = 0xAAAABBBBCCCCDDDD; auto low = ExtractLowPart(value); REQUIRE(low == 0xCCCCDDDD); REQUIRE(value == 0xAAAABBBB); } } TEST_CASE("ExtractLowPartSx", "[big]") { SECTION("extracts low part of 0") { uint64_t value = 0; auto low = ExtractLowPartSx(value); REQUIRE(low == 0); REQUIRE(value == 0); } SECTION("extracts low part of 0x12345678") { uint64_t value = 0x12345678; auto low = ExtractLowPartSx(value); REQUIRE(low == 0x12345678); REQUIRE(value == 0); } SECTION("extracts low part of 0xAAAABBBBCCCCDDDD") { uint64_t value = 0xAAAABBBBCCCCDDDD; auto low = ExtractLowPartSx(value); REQUIRE(low == 0xCCCCDDDD); REQUIRE(value == 0xFFFFFFFFAAAABBBB); } } TEST_CASE("MakeLarge", "[big]") { SECTION("creates uint64_t out of 0xAABBCCDD and 0x11223344") { uint64_t value = MakeLarge(0xAABBCCDD, 0x11223344); REQUIRE(value == 0x11223344AABBCCDD); } SECTION("creates uint64_t out of 0 and 0x11223344") { uint64_t value = MakeLarge(0x00000000, 0x11223344); REQUIRE(value == 0x1122334400000000); } } TEST_CASE("SBigFromUnsigned", "[big]") { SECTION("creates bigdata from 0") { BigData* num; SBigNew(&num); SBigFromUnsigned(num, 0); CHECK(num->Primary().Count() == 1); CHECK(num->Primary()[0] == 0); SBigDel(num); } SECTION("creates bigdata from 0x12345678") { BigData* num; SBigNew(&num); SBigFromUnsigned(num, 0x12345678); CHECK(num->Primary().Count() == 1); CHECK(num->Primary()[0] == 0x12345678); SBigDel(num); } } TEST_CASE("SBigToBinaryBuffer", "[big]") { SECTION("returns expected buffer for bigdata representing 0") { BigData* num; SBigNew(&num); SBigFromUnsigned(num, 0); uint8_t buffer[4]; uint32_t bytes; SBigToBinaryBuffer(num, buffer, sizeof(buffer), &bytes); REQUIRE(bytes == 0); SBigDel(num); } SECTION("returns expected buffer for bigdata representing 0x12345678") { BigData* num; SBigNew(&num); SBigFromUnsigned(num, 0x12345678); uint8_t buffer[4]; uint32_t bytes; SBigToBinaryBuffer(num, buffer, sizeof(buffer), &bytes); CHECK(bytes == 4); CHECK(*reinterpret_cast(buffer) == 0x12345678); SBigDel(num); } }