diff options
Diffstat (limited to 'src/tests/common/host_memory.cpp')
| -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; | |||
| 12 | static constexpr size_t VIRTUAL_SIZE = 1ULL << 39; | 12 | static constexpr size_t VIRTUAL_SIZE = 1ULL << 39; |
| 13 | static constexpr size_t BACKING_SIZE = 4_GiB; | 13 | static constexpr size_t BACKING_SIZE = 4_GiB; |
| 14 | static constexpr auto PERMS = Common::MemoryPermission::ReadWrite; | 14 | static constexpr auto PERMS = Common::MemoryPermission::ReadWrite; |
| 15 | static constexpr auto HEAP = false; | ||
| 15 | 16 | ||
| 16 | TEST_CASE("HostMemory: Initialize and deinitialize", "[common]") { | 17 | TEST_CASE("HostMemory: Initialize and deinitialize", "[common]") { |
| 17 | { HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); } | 18 | { HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); } |
| @@ -20,7 +21,7 @@ TEST_CASE("HostMemory: Initialize and deinitialize", "[common]") { | |||
| 20 | 21 | ||
| 21 | TEST_CASE("HostMemory: Simple map", "[common]") { | 22 | TEST_CASE("HostMemory: Simple map", "[common]") { |
| 22 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 23 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 23 | mem.Map(0x5000, 0x8000, 0x1000, PERMS); | 24 | mem.Map(0x5000, 0x8000, 0x1000, PERMS, HEAP); |
| 24 | 25 | ||
| 25 | volatile u8* const data = mem.VirtualBasePointer() + 0x5000; | 26 | volatile u8* const data = mem.VirtualBasePointer() + 0x5000; |
| 26 | data[0] = 50; | 27 | data[0] = 50; |
| @@ -29,8 +30,8 @@ TEST_CASE("HostMemory: Simple map", "[common]") { | |||
| 29 | 30 | ||
| 30 | TEST_CASE("HostMemory: Simple mirror map", "[common]") { | 31 | TEST_CASE("HostMemory: Simple mirror map", "[common]") { |
| 31 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 32 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 32 | mem.Map(0x5000, 0x3000, 0x2000, PERMS); | 33 | mem.Map(0x5000, 0x3000, 0x2000, PERMS, HEAP); |
| 33 | mem.Map(0x8000, 0x4000, 0x1000, PERMS); | 34 | mem.Map(0x8000, 0x4000, 0x1000, PERMS, HEAP); |
| 34 | 35 | ||
| 35 | volatile u8* const mirror_a = mem.VirtualBasePointer() + 0x5000; | 36 | volatile u8* const mirror_a = mem.VirtualBasePointer() + 0x5000; |
| 36 | volatile u8* const mirror_b = mem.VirtualBasePointer() + 0x8000; | 37 | volatile u8* const mirror_b = mem.VirtualBasePointer() + 0x8000; |
| @@ -40,116 +41,116 @@ TEST_CASE("HostMemory: Simple mirror map", "[common]") { | |||
| 40 | 41 | ||
| 41 | TEST_CASE("HostMemory: Simple unmap", "[common]") { | 42 | TEST_CASE("HostMemory: Simple unmap", "[common]") { |
| 42 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 43 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 43 | mem.Map(0x5000, 0x3000, 0x2000, PERMS); | 44 | mem.Map(0x5000, 0x3000, 0x2000, PERMS, HEAP); |
| 44 | 45 | ||
| 45 | volatile u8* const data = mem.VirtualBasePointer() + 0x5000; | 46 | volatile u8* const data = mem.VirtualBasePointer() + 0x5000; |
| 46 | data[75] = 50; | 47 | data[75] = 50; |
| 47 | REQUIRE(data[75] == 50); | 48 | REQUIRE(data[75] == 50); |
| 48 | 49 | ||
| 49 | mem.Unmap(0x5000, 0x2000); | 50 | mem.Unmap(0x5000, 0x2000, HEAP); |
| 50 | } | 51 | } |
| 51 | 52 | ||
| 52 | TEST_CASE("HostMemory: Simple unmap and remap", "[common]") { | 53 | TEST_CASE("HostMemory: Simple unmap and remap", "[common]") { |
| 53 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 54 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 54 | mem.Map(0x5000, 0x3000, 0x2000, PERMS); | 55 | mem.Map(0x5000, 0x3000, 0x2000, PERMS, HEAP); |
| 55 | 56 | ||
| 56 | volatile u8* const data = mem.VirtualBasePointer() + 0x5000; | 57 | volatile u8* const data = mem.VirtualBasePointer() + 0x5000; |
| 57 | data[0] = 50; | 58 | data[0] = 50; |
| 58 | REQUIRE(data[0] == 50); | 59 | REQUIRE(data[0] == 50); |
| 59 | 60 | ||
| 60 | mem.Unmap(0x5000, 0x2000); | 61 | mem.Unmap(0x5000, 0x2000, HEAP); |
| 61 | 62 | ||
| 62 | mem.Map(0x5000, 0x3000, 0x2000, PERMS); | 63 | mem.Map(0x5000, 0x3000, 0x2000, PERMS, HEAP); |
| 63 | REQUIRE(data[0] == 50); | 64 | REQUIRE(data[0] == 50); |
| 64 | 65 | ||
| 65 | mem.Map(0x7000, 0x2000, 0x5000, PERMS); | 66 | mem.Map(0x7000, 0x2000, 0x5000, PERMS, HEAP); |
| 66 | REQUIRE(data[0x3000] == 50); | 67 | REQUIRE(data[0x3000] == 50); |
| 67 | } | 68 | } |
| 68 | 69 | ||
| 69 | TEST_CASE("HostMemory: Nieche allocation", "[common]") { | 70 | TEST_CASE("HostMemory: Nieche allocation", "[common]") { |
| 70 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 71 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 71 | mem.Map(0x0000, 0, 0x20000, PERMS); | 72 | mem.Map(0x0000, 0, 0x20000, PERMS, HEAP); |
| 72 | mem.Unmap(0x0000, 0x4000); | 73 | mem.Unmap(0x0000, 0x4000, HEAP); |
| 73 | mem.Map(0x1000, 0, 0x2000, PERMS); | 74 | mem.Map(0x1000, 0, 0x2000, PERMS, HEAP); |
| 74 | mem.Map(0x3000, 0, 0x1000, PERMS); | 75 | mem.Map(0x3000, 0, 0x1000, PERMS, HEAP); |
| 75 | mem.Map(0, 0, 0x1000, PERMS); | 76 | mem.Map(0, 0, 0x1000, PERMS, HEAP); |
| 76 | } | 77 | } |
| 77 | 78 | ||
| 78 | TEST_CASE("HostMemory: Full unmap", "[common]") { | 79 | TEST_CASE("HostMemory: Full unmap", "[common]") { |
| 79 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 80 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 80 | mem.Map(0x8000, 0, 0x4000, PERMS); | 81 | mem.Map(0x8000, 0, 0x4000, PERMS, HEAP); |
| 81 | mem.Unmap(0x8000, 0x4000); | 82 | mem.Unmap(0x8000, 0x4000, HEAP); |
| 82 | mem.Map(0x6000, 0, 0x16000, PERMS); | 83 | mem.Map(0x6000, 0, 0x16000, PERMS, HEAP); |
| 83 | } | 84 | } |
| 84 | 85 | ||
| 85 | TEST_CASE("HostMemory: Right out of bounds unmap", "[common]") { | 86 | TEST_CASE("HostMemory: Right out of bounds unmap", "[common]") { |
| 86 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 87 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 87 | mem.Map(0x0000, 0, 0x4000, PERMS); | 88 | mem.Map(0x0000, 0, 0x4000, PERMS, HEAP); |
| 88 | mem.Unmap(0x2000, 0x4000); | 89 | mem.Unmap(0x2000, 0x4000, HEAP); |
| 89 | mem.Map(0x2000, 0x80000, 0x4000, PERMS); | 90 | mem.Map(0x2000, 0x80000, 0x4000, PERMS, HEAP); |
| 90 | } | 91 | } |
| 91 | 92 | ||
| 92 | TEST_CASE("HostMemory: Left out of bounds unmap", "[common]") { | 93 | TEST_CASE("HostMemory: Left out of bounds unmap", "[common]") { |
| 93 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 94 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 94 | mem.Map(0x8000, 0, 0x4000, PERMS); | 95 | mem.Map(0x8000, 0, 0x4000, PERMS, HEAP); |
| 95 | mem.Unmap(0x6000, 0x4000); | 96 | mem.Unmap(0x6000, 0x4000, HEAP); |
| 96 | mem.Map(0x8000, 0, 0x2000, PERMS); | 97 | mem.Map(0x8000, 0, 0x2000, PERMS, HEAP); |
| 97 | } | 98 | } |
| 98 | 99 | ||
| 99 | TEST_CASE("HostMemory: Multiple placeholder unmap", "[common]") { | 100 | TEST_CASE("HostMemory: Multiple placeholder unmap", "[common]") { |
| 100 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 101 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 101 | mem.Map(0x0000, 0, 0x4000, PERMS); | 102 | mem.Map(0x0000, 0, 0x4000, PERMS, HEAP); |
| 102 | mem.Map(0x4000, 0, 0x1b000, PERMS); | 103 | mem.Map(0x4000, 0, 0x1b000, PERMS, HEAP); |
| 103 | mem.Unmap(0x3000, 0x1c000); | 104 | mem.Unmap(0x3000, 0x1c000, HEAP); |
| 104 | mem.Map(0x3000, 0, 0x20000, PERMS); | 105 | mem.Map(0x3000, 0, 0x20000, PERMS, HEAP); |
| 105 | } | 106 | } |
| 106 | 107 | ||
| 107 | TEST_CASE("HostMemory: Unmap between placeholders", "[common]") { | 108 | TEST_CASE("HostMemory: Unmap between placeholders", "[common]") { |
| 108 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 109 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 109 | mem.Map(0x0000, 0, 0x4000, PERMS); | 110 | mem.Map(0x0000, 0, 0x4000, PERMS, HEAP); |
| 110 | mem.Map(0x4000, 0, 0x4000, PERMS); | 111 | mem.Map(0x4000, 0, 0x4000, PERMS, HEAP); |
| 111 | mem.Unmap(0x2000, 0x4000); | 112 | mem.Unmap(0x2000, 0x4000, HEAP); |
| 112 | mem.Map(0x2000, 0, 0x4000, PERMS); | 113 | mem.Map(0x2000, 0, 0x4000, PERMS, HEAP); |
| 113 | } | 114 | } |
| 114 | 115 | ||
| 115 | TEST_CASE("HostMemory: Unmap to origin", "[common]") { | 116 | TEST_CASE("HostMemory: Unmap to origin", "[common]") { |
| 116 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 117 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 117 | mem.Map(0x4000, 0, 0x4000, PERMS); | 118 | mem.Map(0x4000, 0, 0x4000, PERMS, HEAP); |
| 118 | mem.Map(0x8000, 0, 0x4000, PERMS); | 119 | mem.Map(0x8000, 0, 0x4000, PERMS, HEAP); |
| 119 | mem.Unmap(0x4000, 0x4000); | 120 | mem.Unmap(0x4000, 0x4000, HEAP); |
| 120 | mem.Map(0, 0, 0x4000, PERMS); | 121 | mem.Map(0, 0, 0x4000, PERMS, HEAP); |
| 121 | mem.Map(0x4000, 0, 0x4000, PERMS); | 122 | mem.Map(0x4000, 0, 0x4000, PERMS, HEAP); |
| 122 | } | 123 | } |
| 123 | 124 | ||
| 124 | TEST_CASE("HostMemory: Unmap to right", "[common]") { | 125 | TEST_CASE("HostMemory: Unmap to right", "[common]") { |
| 125 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 126 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 126 | mem.Map(0x4000, 0, 0x4000, PERMS); | 127 | mem.Map(0x4000, 0, 0x4000, PERMS, HEAP); |
| 127 | mem.Map(0x8000, 0, 0x4000, PERMS); | 128 | mem.Map(0x8000, 0, 0x4000, PERMS, HEAP); |
| 128 | mem.Unmap(0x8000, 0x4000); | 129 | mem.Unmap(0x8000, 0x4000, HEAP); |
| 129 | mem.Map(0x8000, 0, 0x4000, PERMS); | 130 | mem.Map(0x8000, 0, 0x4000, PERMS, HEAP); |
| 130 | } | 131 | } |
| 131 | 132 | ||
| 132 | TEST_CASE("HostMemory: Partial right unmap check bindings", "[common]") { | 133 | TEST_CASE("HostMemory: Partial right unmap check bindings", "[common]") { |
| 133 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 134 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 134 | mem.Map(0x4000, 0x10000, 0x4000, PERMS); | 135 | mem.Map(0x4000, 0x10000, 0x4000, PERMS, HEAP); |
| 135 | 136 | ||
| 136 | volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000; | 137 | volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000; |
| 137 | ptr[0x1000] = 17; | 138 | ptr[0x1000] = 17; |
| 138 | 139 | ||
| 139 | mem.Unmap(0x6000, 0x2000); | 140 | mem.Unmap(0x6000, 0x2000, HEAP); |
| 140 | 141 | ||
| 141 | REQUIRE(ptr[0x1000] == 17); | 142 | REQUIRE(ptr[0x1000] == 17); |
| 142 | } | 143 | } |
| 143 | 144 | ||
| 144 | TEST_CASE("HostMemory: Partial left unmap check bindings", "[common]") { | 145 | TEST_CASE("HostMemory: Partial left unmap check bindings", "[common]") { |
| 145 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 146 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 146 | mem.Map(0x4000, 0x10000, 0x4000, PERMS); | 147 | mem.Map(0x4000, 0x10000, 0x4000, PERMS, HEAP); |
| 147 | 148 | ||
| 148 | volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000; | 149 | volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000; |
| 149 | ptr[0x3000] = 19; | 150 | ptr[0x3000] = 19; |
| 150 | ptr[0x3fff] = 12; | 151 | ptr[0x3fff] = 12; |
| 151 | 152 | ||
| 152 | mem.Unmap(0x4000, 0x2000); | 153 | mem.Unmap(0x4000, 0x2000, HEAP); |
| 153 | 154 | ||
| 154 | REQUIRE(ptr[0x3000] == 19); | 155 | REQUIRE(ptr[0x3000] == 19); |
| 155 | REQUIRE(ptr[0x3fff] == 12); | 156 | REQUIRE(ptr[0x3fff] == 12); |
| @@ -157,13 +158,13 @@ TEST_CASE("HostMemory: Partial left unmap check bindings", "[common]") { | |||
| 157 | 158 | ||
| 158 | TEST_CASE("HostMemory: Partial middle unmap check bindings", "[common]") { | 159 | TEST_CASE("HostMemory: Partial middle unmap check bindings", "[common]") { |
| 159 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 160 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 160 | mem.Map(0x4000, 0x10000, 0x4000, PERMS); | 161 | mem.Map(0x4000, 0x10000, 0x4000, PERMS, HEAP); |
| 161 | 162 | ||
| 162 | volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000; | 163 | volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000; |
| 163 | ptr[0x0000] = 19; | 164 | ptr[0x0000] = 19; |
| 164 | ptr[0x3fff] = 12; | 165 | ptr[0x3fff] = 12; |
| 165 | 166 | ||
| 166 | mem.Unmap(0x1000, 0x2000); | 167 | mem.Unmap(0x1000, 0x2000, HEAP); |
| 167 | 168 | ||
| 168 | REQUIRE(ptr[0x0000] == 19); | 169 | REQUIRE(ptr[0x0000] == 19); |
| 169 | REQUIRE(ptr[0x3fff] == 12); | 170 | REQUIRE(ptr[0x3fff] == 12); |
| @@ -171,14 +172,14 @@ TEST_CASE("HostMemory: Partial middle unmap check bindings", "[common]") { | |||
| 171 | 172 | ||
| 172 | TEST_CASE("HostMemory: Partial sparse middle unmap and check bindings", "[common]") { | 173 | TEST_CASE("HostMemory: Partial sparse middle unmap and check bindings", "[common]") { |
| 173 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); | 174 | HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); |
| 174 | mem.Map(0x4000, 0x10000, 0x2000, PERMS); | 175 | mem.Map(0x4000, 0x10000, 0x2000, PERMS, HEAP); |
| 175 | mem.Map(0x6000, 0x20000, 0x2000, PERMS); | 176 | mem.Map(0x6000, 0x20000, 0x2000, PERMS, HEAP); |
| 176 | 177 | ||
| 177 | volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000; | 178 | volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000; |
| 178 | ptr[0x0000] = 19; | 179 | ptr[0x0000] = 19; |
| 179 | ptr[0x3fff] = 12; | 180 | ptr[0x3fff] = 12; |
| 180 | 181 | ||
| 181 | mem.Unmap(0x5000, 0x2000); | 182 | mem.Unmap(0x5000, 0x2000, HEAP); |
| 182 | 183 | ||
| 183 | REQUIRE(ptr[0x0000] == 19); | 184 | REQUIRE(ptr[0x0000] == 19); |
| 184 | REQUIRE(ptr[0x3fff] == 12); | 185 | REQUIRE(ptr[0x3fff] == 12); |