diff options
Diffstat (limited to 'src/tests/common')
| -rw-r--r-- | src/tests/common/host_memory.cpp | 99 | 
1 files changed, 50 insertions, 49 deletions
| diff --git a/src/tests/common/host_memory.cpp b/src/tests/common/host_memory.cpp index 1a28e862b..cb040c942 100644 --- a/src/tests/common/host_memory.cpp +++ b/src/tests/common/host_memory.cpp @@ -12,6 +12,7 @@ using namespace Common::Literals;  static constexpr size_t VIRTUAL_SIZE = 1ULL << 39;  static constexpr size_t BACKING_SIZE = 4_GiB;  static constexpr auto PERMS = Common::MemoryPermission::ReadWrite; +static constexpr auto HEAP = false;  TEST_CASE("HostMemory: Initialize and deinitialize", "[common]") {      { HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); } @@ -20,7 +21,7 @@ TEST_CASE("HostMemory: Initialize and deinitialize", "[common]") {  TEST_CASE("HostMemory: Simple map", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x5000, 0x8000, 0x1000, PERMS); +    mem.Map(0x5000, 0x8000, 0x1000, PERMS, HEAP);      volatile u8* const data = mem.VirtualBasePointer() + 0x5000;      data[0] = 50; @@ -29,8 +30,8 @@ TEST_CASE("HostMemory: Simple map", "[common]") {  TEST_CASE("HostMemory: Simple mirror map", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x5000, 0x3000, 0x2000, PERMS); -    mem.Map(0x8000, 0x4000, 0x1000, PERMS); +    mem.Map(0x5000, 0x3000, 0x2000, PERMS, HEAP); +    mem.Map(0x8000, 0x4000, 0x1000, PERMS, HEAP);      volatile u8* const mirror_a = mem.VirtualBasePointer() + 0x5000;      volatile u8* const mirror_b = mem.VirtualBasePointer() + 0x8000; @@ -40,116 +41,116 @@ TEST_CASE("HostMemory: Simple mirror map", "[common]") {  TEST_CASE("HostMemory: Simple unmap", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x5000, 0x3000, 0x2000, PERMS); +    mem.Map(0x5000, 0x3000, 0x2000, PERMS, HEAP);      volatile u8* const data = mem.VirtualBasePointer() + 0x5000;      data[75] = 50;      REQUIRE(data[75] == 50); -    mem.Unmap(0x5000, 0x2000); +    mem.Unmap(0x5000, 0x2000, HEAP);  }  TEST_CASE("HostMemory: Simple unmap and remap", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x5000, 0x3000, 0x2000, PERMS); +    mem.Map(0x5000, 0x3000, 0x2000, PERMS, HEAP);      volatile u8* const data = mem.VirtualBasePointer() + 0x5000;      data[0] = 50;      REQUIRE(data[0] == 50); -    mem.Unmap(0x5000, 0x2000); +    mem.Unmap(0x5000, 0x2000, HEAP); -    mem.Map(0x5000, 0x3000, 0x2000, PERMS); +    mem.Map(0x5000, 0x3000, 0x2000, PERMS, HEAP);      REQUIRE(data[0] == 50); -    mem.Map(0x7000, 0x2000, 0x5000, PERMS); +    mem.Map(0x7000, 0x2000, 0x5000, PERMS, HEAP);      REQUIRE(data[0x3000] == 50);  }  TEST_CASE("HostMemory: Nieche allocation", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x0000, 0, 0x20000, PERMS); -    mem.Unmap(0x0000, 0x4000); -    mem.Map(0x1000, 0, 0x2000, PERMS); -    mem.Map(0x3000, 0, 0x1000, PERMS); -    mem.Map(0, 0, 0x1000, PERMS); +    mem.Map(0x0000, 0, 0x20000, PERMS, HEAP); +    mem.Unmap(0x0000, 0x4000, HEAP); +    mem.Map(0x1000, 0, 0x2000, PERMS, HEAP); +    mem.Map(0x3000, 0, 0x1000, PERMS, HEAP); +    mem.Map(0, 0, 0x1000, PERMS, HEAP);  }  TEST_CASE("HostMemory: Full unmap", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x8000, 0, 0x4000, PERMS); -    mem.Unmap(0x8000, 0x4000); -    mem.Map(0x6000, 0, 0x16000, PERMS); +    mem.Map(0x8000, 0, 0x4000, PERMS, HEAP); +    mem.Unmap(0x8000, 0x4000, HEAP); +    mem.Map(0x6000, 0, 0x16000, PERMS, HEAP);  }  TEST_CASE("HostMemory: Right out of bounds unmap", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x0000, 0, 0x4000, PERMS); -    mem.Unmap(0x2000, 0x4000); -    mem.Map(0x2000, 0x80000, 0x4000, PERMS); +    mem.Map(0x0000, 0, 0x4000, PERMS, HEAP); +    mem.Unmap(0x2000, 0x4000, HEAP); +    mem.Map(0x2000, 0x80000, 0x4000, PERMS, HEAP);  }  TEST_CASE("HostMemory: Left out of bounds unmap", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x8000, 0, 0x4000, PERMS); -    mem.Unmap(0x6000, 0x4000); -    mem.Map(0x8000, 0, 0x2000, PERMS); +    mem.Map(0x8000, 0, 0x4000, PERMS, HEAP); +    mem.Unmap(0x6000, 0x4000, HEAP); +    mem.Map(0x8000, 0, 0x2000, PERMS, HEAP);  }  TEST_CASE("HostMemory: Multiple placeholder unmap", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x0000, 0, 0x4000, PERMS); -    mem.Map(0x4000, 0, 0x1b000, PERMS); -    mem.Unmap(0x3000, 0x1c000); -    mem.Map(0x3000, 0, 0x20000, PERMS); +    mem.Map(0x0000, 0, 0x4000, PERMS, HEAP); +    mem.Map(0x4000, 0, 0x1b000, PERMS, HEAP); +    mem.Unmap(0x3000, 0x1c000, HEAP); +    mem.Map(0x3000, 0, 0x20000, PERMS, HEAP);  }  TEST_CASE("HostMemory: Unmap between placeholders", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x0000, 0, 0x4000, PERMS); -    mem.Map(0x4000, 0, 0x4000, PERMS); -    mem.Unmap(0x2000, 0x4000); -    mem.Map(0x2000, 0, 0x4000, PERMS); +    mem.Map(0x0000, 0, 0x4000, PERMS, HEAP); +    mem.Map(0x4000, 0, 0x4000, PERMS, HEAP); +    mem.Unmap(0x2000, 0x4000, HEAP); +    mem.Map(0x2000, 0, 0x4000, PERMS, HEAP);  }  TEST_CASE("HostMemory: Unmap to origin", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x4000, 0, 0x4000, PERMS); -    mem.Map(0x8000, 0, 0x4000, PERMS); -    mem.Unmap(0x4000, 0x4000); -    mem.Map(0, 0, 0x4000, PERMS); -    mem.Map(0x4000, 0, 0x4000, PERMS); +    mem.Map(0x4000, 0, 0x4000, PERMS, HEAP); +    mem.Map(0x8000, 0, 0x4000, PERMS, HEAP); +    mem.Unmap(0x4000, 0x4000, HEAP); +    mem.Map(0, 0, 0x4000, PERMS, HEAP); +    mem.Map(0x4000, 0, 0x4000, PERMS, HEAP);  }  TEST_CASE("HostMemory: Unmap to right", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x4000, 0, 0x4000, PERMS); -    mem.Map(0x8000, 0, 0x4000, PERMS); -    mem.Unmap(0x8000, 0x4000); -    mem.Map(0x8000, 0, 0x4000, PERMS); +    mem.Map(0x4000, 0, 0x4000, PERMS, HEAP); +    mem.Map(0x8000, 0, 0x4000, PERMS, HEAP); +    mem.Unmap(0x8000, 0x4000, HEAP); +    mem.Map(0x8000, 0, 0x4000, PERMS, HEAP);  }  TEST_CASE("HostMemory: Partial right unmap check bindings", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x4000, 0x10000, 0x4000, PERMS); +    mem.Map(0x4000, 0x10000, 0x4000, PERMS, HEAP);      volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000;      ptr[0x1000] = 17; -    mem.Unmap(0x6000, 0x2000); +    mem.Unmap(0x6000, 0x2000, HEAP);      REQUIRE(ptr[0x1000] == 17);  }  TEST_CASE("HostMemory: Partial left unmap check bindings", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x4000, 0x10000, 0x4000, PERMS); +    mem.Map(0x4000, 0x10000, 0x4000, PERMS, HEAP);      volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000;      ptr[0x3000] = 19;      ptr[0x3fff] = 12; -    mem.Unmap(0x4000, 0x2000); +    mem.Unmap(0x4000, 0x2000, HEAP);      REQUIRE(ptr[0x3000] == 19);      REQUIRE(ptr[0x3fff] == 12); @@ -157,13 +158,13 @@ TEST_CASE("HostMemory: Partial left unmap check bindings", "[common]") {  TEST_CASE("HostMemory: Partial middle unmap check bindings", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x4000, 0x10000, 0x4000, PERMS); +    mem.Map(0x4000, 0x10000, 0x4000, PERMS, HEAP);      volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000;      ptr[0x0000] = 19;      ptr[0x3fff] = 12; -    mem.Unmap(0x1000, 0x2000); +    mem.Unmap(0x1000, 0x2000, HEAP);      REQUIRE(ptr[0x0000] == 19);      REQUIRE(ptr[0x3fff] == 12); @@ -171,14 +172,14 @@ TEST_CASE("HostMemory: Partial middle unmap check bindings", "[common]") {  TEST_CASE("HostMemory: Partial sparse middle unmap and check bindings", "[common]") {      HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); -    mem.Map(0x4000, 0x10000, 0x2000, PERMS); -    mem.Map(0x6000, 0x20000, 0x2000, PERMS); +    mem.Map(0x4000, 0x10000, 0x2000, PERMS, HEAP); +    mem.Map(0x6000, 0x20000, 0x2000, PERMS, HEAP);      volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000;      ptr[0x0000] = 19;      ptr[0x3fff] = 12; -    mem.Unmap(0x5000, 0x2000); +    mem.Unmap(0x5000, 0x2000, HEAP);      REQUIRE(ptr[0x0000] == 19);      REQUIRE(ptr[0x3fff] == 12); | 
