diff options
| author | 2022-11-17 16:36:53 +0100 | |
|---|---|---|
| committer | 2023-01-01 16:43:57 -0500 | |
| commit | 18637766efd1ff9a0c22967553983cfda69c96ca (patch) | |
| tree | 142d4cab2de27ce250d246f0355fec97748a7bcf /src/tests | |
| parent | MacroHLE: Add HLE replacement for base vertex and base instance. (diff) | |
| download | yuzu-18637766efd1ff9a0c22967553983cfda69c96ca.tar.gz yuzu-18637766efd1ff9a0c22967553983cfda69c96ca.tar.xz yuzu-18637766efd1ff9a0c22967553983cfda69c96ca.zip | |
MacroHLE: Reduce massive calculations on sizing estimation.
Diffstat (limited to 'src/tests')
| -rw-r--r-- | src/tests/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/tests/common/range_map.cpp | 70 |
2 files changed, 71 insertions, 0 deletions
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 6a4022e45..9b65e79cb 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt | |||
| @@ -7,6 +7,7 @@ add_executable(tests | |||
| 7 | common/fibers.cpp | 7 | common/fibers.cpp |
| 8 | common/host_memory.cpp | 8 | common/host_memory.cpp |
| 9 | common/param_package.cpp | 9 | common/param_package.cpp |
| 10 | common/range_map.cpp | ||
| 10 | common/ring_buffer.cpp | 11 | common/ring_buffer.cpp |
| 11 | common/scratch_buffer.cpp | 12 | common/scratch_buffer.cpp |
| 12 | common/unique_function.cpp | 13 | common/unique_function.cpp |
diff --git a/src/tests/common/range_map.cpp b/src/tests/common/range_map.cpp new file mode 100644 index 000000000..5a4630a38 --- /dev/null +++ b/src/tests/common/range_map.cpp | |||
| @@ -0,0 +1,70 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-3.0-or-later | ||
| 3 | |||
| 4 | #include <stdexcept> | ||
| 5 | |||
| 6 | #include <catch2/catch.hpp> | ||
| 7 | |||
| 8 | #include "common/range_map.h" | ||
| 9 | |||
| 10 | enum class MappedEnum : u32 { | ||
| 11 | Invalid = 0, | ||
| 12 | Valid_1 = 1, | ||
| 13 | Valid_2 = 2, | ||
| 14 | Valid_3 = 3, | ||
| 15 | }; | ||
| 16 | |||
| 17 | TEST_CASE("Range Map: Setup", "[video_core]") { | ||
| 18 | Common::RangeMap<u64, MappedEnum> my_map(MappedEnum::Invalid); | ||
| 19 | my_map.Map(3000, 3500, MappedEnum::Valid_1); | ||
| 20 | my_map.Unmap(3200, 3600); | ||
| 21 | my_map.Map(4000, 4500, MappedEnum::Valid_2); | ||
| 22 | my_map.Map(4200, 4400, MappedEnum::Valid_2); | ||
| 23 | my_map.Map(4200, 4400, MappedEnum::Valid_1); | ||
| 24 | REQUIRE(my_map.GetContinousSizeFrom(4200) == 200); | ||
| 25 | REQUIRE(my_map.GetContinousSizeFrom(3000) == 200); | ||
| 26 | REQUIRE(my_map.GetContinousSizeFrom(2900) == 0); | ||
| 27 | |||
| 28 | REQUIRE(my_map.GetValueAt(2900) == MappedEnum::Invalid); | ||
| 29 | REQUIRE(my_map.GetValueAt(3100) == MappedEnum::Valid_1); | ||
| 30 | REQUIRE(my_map.GetValueAt(3000) == MappedEnum::Valid_1); | ||
| 31 | REQUIRE(my_map.GetValueAt(3200) == MappedEnum::Invalid); | ||
| 32 | |||
| 33 | REQUIRE(my_map.GetValueAt(4199) == MappedEnum::Valid_2); | ||
| 34 | REQUIRE(my_map.GetValueAt(4200) == MappedEnum::Valid_1); | ||
| 35 | REQUIRE(my_map.GetValueAt(4400) == MappedEnum::Valid_2); | ||
| 36 | REQUIRE(my_map.GetValueAt(4500) == MappedEnum::Invalid); | ||
| 37 | REQUIRE(my_map.GetValueAt(4600) == MappedEnum::Invalid); | ||
| 38 | |||
| 39 | my_map.Unmap(0, 6000); | ||
| 40 | for (u64 address = 0; address < 10000; address += 1000) { | ||
| 41 | REQUIRE(my_map.GetContinousSizeFrom(address) == 0); | ||
| 42 | } | ||
| 43 | |||
| 44 | my_map.Map(1000, 3000, MappedEnum::Valid_1); | ||
| 45 | my_map.Map(4000, 5000, MappedEnum::Valid_1); | ||
| 46 | my_map.Map(2500, 4100, MappedEnum::Valid_1); | ||
| 47 | REQUIRE(my_map.GetContinousSizeFrom(1000) == 4000); | ||
| 48 | |||
| 49 | my_map.Map(1000, 3000, MappedEnum::Valid_1); | ||
| 50 | my_map.Map(4000, 5000, MappedEnum::Valid_2); | ||
| 51 | my_map.Map(2500, 4100, MappedEnum::Valid_3); | ||
| 52 | REQUIRE(my_map.GetContinousSizeFrom(1000) == 1500); | ||
| 53 | REQUIRE(my_map.GetContinousSizeFrom(2500) == 1600); | ||
| 54 | REQUIRE(my_map.GetContinousSizeFrom(4100) == 900); | ||
| 55 | REQUIRE(my_map.GetValueAt(900) == MappedEnum::Invalid); | ||
| 56 | REQUIRE(my_map.GetValueAt(1000) == MappedEnum::Valid_1); | ||
| 57 | REQUIRE(my_map.GetValueAt(2500) == MappedEnum::Valid_3); | ||
| 58 | REQUIRE(my_map.GetValueAt(4100) == MappedEnum::Valid_2); | ||
| 59 | REQUIRE(my_map.GetValueAt(5000) == MappedEnum::Invalid); | ||
| 60 | |||
| 61 | my_map.Map(2000, 6000, MappedEnum::Valid_3); | ||
| 62 | REQUIRE(my_map.GetContinousSizeFrom(1000) == 1000); | ||
| 63 | REQUIRE(my_map.GetContinousSizeFrom(3000) == 3000); | ||
| 64 | REQUIRE(my_map.GetValueAt(1000) == MappedEnum::Valid_1); | ||
| 65 | REQUIRE(my_map.GetValueAt(1999) == MappedEnum::Valid_1); | ||
| 66 | REQUIRE(my_map.GetValueAt(1500) == MappedEnum::Valid_1); | ||
| 67 | REQUIRE(my_map.GetValueAt(2001) == MappedEnum::Valid_3); | ||
| 68 | REQUIRE(my_map.GetValueAt(5999) == MappedEnum::Valid_3); | ||
| 69 | REQUIRE(my_map.GetValueAt(6000) == MappedEnum::Invalid); | ||
| 70 | } | ||