summaryrefslogtreecommitdiff
path: root/src/tests/common/range_map.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/common/range_map.cpp')
-rw-r--r--src/tests/common/range_map.cpp70
1 files changed, 70 insertions, 0 deletions
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
10enum class MappedEnum : u32 {
11 Invalid = 0,
12 Valid_1 = 1,
13 Valid_2 = 2,
14 Valid_3 = 3,
15};
16
17TEST_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}