diff --git a/rpcs3/Emu/RSX/Common/simple_array.hpp b/rpcs3/Emu/RSX/Common/simple_array.hpp index 00bc7602a6..5656eb30df 100644 --- a/rpcs3/Emu/RSX/Common/simple_array.hpp +++ b/rpcs3/Emu/RSX/Common/simple_array.hpp @@ -398,32 +398,32 @@ namespace rsx reverse_iterator rbegin() { - return reverse_iterator(end()); + return reverse_iterator(end() - 1); } reverse_iterator rend() { - return reverse_iterator(begin()); + return reverse_iterator(begin() - 1); } const_reverse_iterator rbegin() const { - return const_reverse_iterator(cend()); + return crbegin(); } const_reverse_iterator rend() const { - return const_reverse_iterator(cbegin()); + return crend(); } const_reverse_iterator crbegin() const { - return const_reverse_iterator(cend()); + return const_reverse_iterator(cend() - 1); } const_reverse_iterator crend() const { - return const_reverse_iterator(cbegin()); + return const_reverse_iterator(cbegin() - 1); } bool any(std::predicate auto predicate) const diff --git a/rpcs3/tests/test_simple_array.cpp b/rpcs3/tests/test_simple_array.cpp index d101dd0a0b..6fc9107e48 100644 --- a/rpcs3/tests/test_simple_array.cpp +++ b/rpcs3/tests/test_simple_array.cpp @@ -229,5 +229,15 @@ namespace rsx } EXPECT_EQ(sum, 15); + + rindex = 0; + sum = 0; + for (auto it = arr.crbegin(); it != arr.crend(); ++it, ++rindex) + { + EXPECT_EQ(*it, arr2[rindex]); + sum += *it; + } + + EXPECT_EQ(sum, 15); } }