2020-11-01 17:45:45 -06:00
|
|
|
#include "storm/Memory.hpp"
|
|
|
|
|
#include "test/Test.hpp"
|
2020-09-07 22:24:42 -05:00
|
|
|
|
2025-09-01 09:37:40 -07:00
|
|
|
#include <cstring>
|
|
|
|
|
#include <numeric>
|
|
|
|
|
|
|
|
|
|
|
2020-09-07 22:24:42 -05:00
|
|
|
TEST_CASE("SMemAlloc", "[memory]") {
|
|
|
|
|
SECTION("allocates memory") {
|
2025-09-01 09:37:40 -07:00
|
|
|
void* ptr = SMemAlloc(16, __FILE__, __LINE__);
|
2020-09-07 22:24:42 -05:00
|
|
|
REQUIRE(ptr != nullptr);
|
2025-09-01 09:37:40 -07:00
|
|
|
CHECK_NOTHROW(memset(ptr, 1, 16));
|
2020-09-07 22:24:42 -05:00
|
|
|
SMemFree(ptr);
|
|
|
|
|
}
|
2025-09-01 09:37:40 -07:00
|
|
|
|
|
|
|
|
SECTION("allocates memory initialized to 0 with flag") {
|
|
|
|
|
void* ptr = SMemAlloc(16, __FILE__, __LINE__, SMEM_FLAG_ZEROMEMORY);
|
|
|
|
|
REQUIRE(ptr != nullptr);
|
|
|
|
|
|
|
|
|
|
uint8_t* pArray = static_cast<uint8_t*>(ptr);
|
|
|
|
|
CHECK(std::accumulate(pArray, pArray + 16, 0u) == 0);
|
|
|
|
|
|
|
|
|
|
SMemFree(ptr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SECTION("allocates a memory pointer even if the size is 0") {
|
|
|
|
|
void* ptr = SMemAlloc(0, __FILE__, __LINE__);
|
|
|
|
|
REQUIRE(ptr != nullptr);
|
|
|
|
|
SMemFree(ptr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-01 20:47:51 -07:00
|
|
|
TEST_CASE("SMemFill", "[memory]") {
|
|
|
|
|
std::vector<uint8_t> data = { 1, 255, 128, 42, 69, 99, 13, 37 };
|
|
|
|
|
|
|
|
|
|
SECTION("replaces bytes") {
|
|
|
|
|
std::vector<uint8_t> result1(8, 255);
|
|
|
|
|
SMemFill(data.data(), 8, 255);
|
|
|
|
|
CHECK_THAT(data, Catch::Matchers::Equals(result1));
|
|
|
|
|
|
|
|
|
|
std::vector<uint8_t> result2 = { 0, 0, 0, 0, 0, 255, 255, 255 };
|
|
|
|
|
SMemFill(data.data(), 5, 0);
|
|
|
|
|
CHECK_THAT(data, Catch::Matchers::Equals(result2));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SECTION("does nothing if size is 0") {
|
|
|
|
|
std::vector<uint8_t> changedata = data;
|
|
|
|
|
SMemFill(changedata.data(), 0, 255);
|
|
|
|
|
|
|
|
|
|
CHECK_THAT(changedata, Catch::Matchers::Equals(data));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-01 09:37:40 -07:00
|
|
|
TEST_CASE("SMemFree", "[memory]") {
|
|
|
|
|
SECTION("does nothing on nullptr") {
|
|
|
|
|
CHECK_NOTHROW(SMemFree(nullptr));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("SMemFree full args", "[memory]") {
|
|
|
|
|
SECTION("does nothing on nullptr") {
|
|
|
|
|
CHECK_NOTHROW(SMemFree(nullptr, __FILE__, __LINE__));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("SMemReAlloc", "[memory]") {
|
|
|
|
|
SECTION("allocates memory") {
|
|
|
|
|
void* ptr = SMemReAlloc(nullptr, 16, __FILE__, __LINE__);
|
|
|
|
|
REQUIRE(ptr != nullptr);
|
|
|
|
|
CHECK_NOTHROW(memset(ptr, 1, 16));
|
|
|
|
|
SMemFree(ptr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SECTION("allocates memory initialized to 0 with flag") {
|
|
|
|
|
void* ptr = SMemReAlloc(nullptr, 16, __FILE__, __LINE__, SMEM_FLAG_ZEROMEMORY);
|
|
|
|
|
REQUIRE(ptr != nullptr);
|
|
|
|
|
|
|
|
|
|
uint8_t* pArray = static_cast<uint8_t*>(ptr);
|
|
|
|
|
CHECK(std::accumulate(pArray, pArray + 16, 0u) == 0);
|
|
|
|
|
|
|
|
|
|
SMemFree(ptr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SECTION("allocates a memory pointer even if the size is 0") {
|
|
|
|
|
void* ptr = SMemReAlloc(nullptr, 0, __FILE__, __LINE__);
|
|
|
|
|
REQUIRE(ptr != nullptr);
|
|
|
|
|
SMemFree(ptr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SECTION("reallocates memory") {
|
|
|
|
|
void* ptr = SMemAlloc(16, __FILE__, __LINE__);
|
|
|
|
|
REQUIRE(ptr != nullptr);
|
|
|
|
|
|
|
|
|
|
*static_cast<uint32_t*>(ptr) = 123456;
|
|
|
|
|
|
|
|
|
|
// 1MB
|
|
|
|
|
void* ptr2 = SMemReAlloc(ptr, 1024 * 1024, __FILE__, __LINE__);
|
|
|
|
|
REQUIRE(ptr2 != nullptr);
|
|
|
|
|
|
|
|
|
|
CHECK(*static_cast<uint32_t*>(ptr2) == 123456);
|
|
|
|
|
CHECK_NOTHROW(memset(ptr2, 1, 1024 * 1024));
|
|
|
|
|
|
|
|
|
|
SMemFree(ptr2);
|
|
|
|
|
}
|
2020-09-07 22:24:42 -05:00
|
|
|
}
|