From 2585ccd873b7683d01a04eb878402e84b7cb9a91 Mon Sep 17 00:00:00 2001 From: Christian Kreibich Date: Thu, 16 Sep 2021 17:16:26 -0700 Subject: [PATCH] Add unit tests for memory helpers --- src/util.cc | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/src/util.cc b/src/util.cc index 171dc79754..484bb5236c 100644 --- a/src/util.cc +++ b/src/util.cc @@ -2205,6 +2205,28 @@ const void* memory_align(const void* ptr, size_t size) return reinterpret_cast(buf); } +TEST_CASE("util memory_align") + { + void* p1000 = (void*)0x1000; + void* p1001 = (void*)0x1001; + void* p1002 = (void*)0x1002; + void* p1003 = (void*)0x1003; + void* p1004 = (void*)0x1004; + + CHECK(memory_align(p1000, 0) == p1000); + CHECK(memory_align(p1000, 1) == p1000); + CHECK(memory_align(p1000, 2) == p1000); + CHECK(memory_align(p1000, 4) == p1000); + + CHECK(memory_align(p1001, 0) == p1001); + CHECK(memory_align(p1001, 1) == p1001); + CHECK(memory_align(p1001, 2) == p1002); + CHECK(memory_align(p1001, 4) == p1004); + + CHECK(memory_align(p1002, 4) == p1004); + CHECK(memory_align(p1003, 4) == p1004); + } + void* memory_align_and_pad(void* ptr, size_t size) { if ( ! size ) @@ -2221,6 +2243,40 @@ void* memory_align_and_pad(void* ptr, size_t size) return reinterpret_cast(buf); } +TEST_CASE("util memory_align_and_pad") + { + unsigned char mem[16]; + + memset(mem, 0xff, 16); + + CHECK((mem[0] == 0xff && mem[1] == 0xff)); + + CHECK(memory_align_and_pad(mem, 0) == mem); + CHECK((mem[0] == 0xff && mem[1] == 0xff)); + + CHECK(memory_align_and_pad(mem, 2) == mem); + CHECK((mem[0] == 0xff && mem[1] == 0xff)); + + CHECK(memory_align_and_pad(mem + 1, 2) == mem + 2); + for ( int i = 1; i < 2; i++ ) + CHECK(mem[i] == 0x00); + CHECK((mem[0] == 0xff && mem[2] == 0xff)); + + memset(mem, 0xff, 16); + + CHECK(memory_align_and_pad(mem + 1, 4) == mem + 4); + for ( int i = 1; i < 3; i++ ) + CHECK(mem[i] == 0x00); + CHECK((mem[0] == 0xff && mem[4] == 0xff)); + + memset(mem, 0xff, 16); + + CHECK(memory_align_and_pad(mem + 1, 8) == mem + 8); + for ( int i = 1; i < 7; i++ ) + CHECK(mem[i] == 0x00); + CHECK((mem[0] == 0xff && mem[8] == 0xff)); + } + int memory_size_align(size_t offset, size_t size) { if ( ! size || ! offset ) @@ -2238,6 +2294,22 @@ int memory_size_align(size_t offset, size_t size) return offset; } +TEST_CASE("util memory_size_align") + { + CHECK(memory_size_align(0x1000, 0) == 0x1000); + CHECK(memory_size_align(0x1000, 1) == 0x1000); + CHECK(memory_size_align(0x1000, 2) == 0x1000); + CHECK(memory_size_align(0x1000, 4) == 0x1000); + + CHECK(memory_size_align(0x1001, 0) == 0x1001); + CHECK(memory_size_align(0x1001, 1) == 0x1001); + CHECK(memory_size_align(0x1001, 2) == 0x1002); + CHECK(memory_size_align(0x1001, 4) == 0x1004); + + CHECK(memory_size_align(0x1002, 4) == 0x1004); + CHECK(memory_size_align(0x1003, 4) == 0x1004); + } + void get_memory_usage(uint64_t* total, uint64_t* malloced) { uint64_t ret_total;