diff --git a/rpcs3/tests/test_pair.cpp b/rpcs3/tests/test_pair.cpp index 086f7102b6..5df152f054 100644 --- a/rpcs3/tests/test_pair.cpp +++ b/rpcs3/tests/test_pair.cpp @@ -3,44 +3,47 @@ #include "util/types.hpp" #include "util/pair.hpp" -struct some_struct +namespace utils { - u64 v {}; - char s[12] = "Hello World"; - - bool operator == (const some_struct& r) const + struct some_struct { - return v == r.v && std::memcmp(s, r.s, sizeof(s)) == 0; + u64 v{}; + char s[12] = "Hello World"; + + bool operator == (const some_struct& r) const + { + return v == r.v && std::memcmp(s, r.s, sizeof(s)) == 0; + } + }; + + TEST(Pair, General) + { + some_struct s{}; + s.v = 1234; + + utils::pair p; + EXPECT_EQ(sizeof(p), 32); + EXPECT_EQ(p.first, 0); + EXPECT_EQ(p.second, some_struct{}); + + p = { 666, s }; + EXPECT_EQ(p.first, 666); + EXPECT_EQ(p.second, s); + + const utils::pair p1 = p; + EXPECT_EQ(p.first, 666); + EXPECT_EQ(p.second, s); + EXPECT_EQ(p1.first, 666); + EXPECT_EQ(p1.second, s); + + utils::pair p2 = p1; + EXPECT_EQ(p1.first, 666); + EXPECT_EQ(p1.second, s); + EXPECT_EQ(p2.first, 666); + EXPECT_EQ(p2.second, s); + + utils::pair p3 = std::move(p); + EXPECT_EQ(p3.first, 666); + EXPECT_EQ(p3.second, s); } -}; - -TEST(Utils, Pair) -{ - some_struct s {}; - s.v = 1234; - - utils::pair p; - EXPECT_EQ(sizeof(p), 32); - EXPECT_EQ(p.first, 0); - EXPECT_EQ(p.second, some_struct{}); - - p = { 666, s }; - EXPECT_EQ(p.first, 666); - EXPECT_EQ(p.second, s); - - const utils::pair p1 = p; - EXPECT_EQ(p.first, 666); - EXPECT_EQ(p.second, s); - EXPECT_EQ(p1.first, 666); - EXPECT_EQ(p1.second, s); - - utils::pair p2 = p1; - EXPECT_EQ(p1.first, 666); - EXPECT_EQ(p1.second, s); - EXPECT_EQ(p2.first, 666); - EXPECT_EQ(p2.second, s); - - utils::pair p3 = std::move(p); - EXPECT_EQ(p3.first, 666); - EXPECT_EQ(p3.second, s); } diff --git a/rpcs3/tests/test_simple_array.cpp b/rpcs3/tests/test_simple_array.cpp index c581ab2277..90a0e73575 100644 --- a/rpcs3/tests/test_simple_array.cpp +++ b/rpcs3/tests/test_simple_array.cpp @@ -267,4 +267,40 @@ namespace rsx EXPECT_EQ(std::memcmp(arr[i].second.s, "Hello World", sizeof(arr[i].second.s)), 0); } } + + TEST(SimpleArray, DataAlignment_SmallVector) + { + struct alignas(16) some_struct { + char data[16]; + }; + + rsx::simple_array arr(2); + const auto data_ptr = reinterpret_cast(arr.data()); + + EXPECT_EQ(data_ptr & 15, 0); + } + + TEST(SimpleArray, DataAlignment_HeapAlloc) + { + struct alignas(16) some_struct { + char data[16]; + }; + + rsx::simple_array arr(128); + const auto data_ptr = reinterpret_cast(arr.data()); + + EXPECT_EQ(data_ptr & 15, 0); + } + + TEST(SimpleArray, DataAlignment_Overrides) + { + rsx::simple_array arr(4); + rsx::simple_array arr2(4); + + const auto data_ptr1 = reinterpret_cast(arr.data()); + const auto data_ptr2 = reinterpret_cast(arr2.data()); + + EXPECT_EQ(data_ptr1 & 15, 0); + EXPECT_EQ(data_ptr2 & 127, 0); + } } diff --git a/rpcs3/tests/test_tuple.cpp b/rpcs3/tests/test_tuple.cpp index 2a174d85d3..831c0aac51 100644 --- a/rpcs3/tests/test_tuple.cpp +++ b/rpcs3/tests/test_tuple.cpp @@ -2,113 +2,116 @@ #include "util/tuple.hpp" -struct some_struct +namespace utils { - u64 v {}; - char s[12] = "Hello World"; - - bool operator == (const some_struct& r) const + struct some_struct { - return v == r.v && std::memcmp(s, r.s, sizeof(s)) == 0; + u64 v{}; + char s[12] = "Hello World"; + + bool operator == (const some_struct& r) const + { + return v == r.v && std::memcmp(s, r.s, sizeof(s)) == 0; + } + }; + + TEST(Tuple, General) + { + some_struct s{}; + s.v = 1234; + + utils::tuple t0 = {}; + EXPECT_EQ(t0.size(), 0); + + utils::tuple t; + EXPECT_EQ(sizeof(t), sizeof(int)); + EXPECT_TRUE((std::is_same_v()), int&>)); + EXPECT_EQ(t.size(), 1); + EXPECT_EQ(t.get<0>(), 0); + + utils::tuple t1 = 2; + EXPECT_EQ(sizeof(t1), sizeof(int)); + EXPECT_TRUE((std::is_same_v()), int&>)); + EXPECT_EQ(t1.size(), 1); + EXPECT_EQ(t1.get<0>(), 2); + t1 = {}; + EXPECT_EQ(t1.size(), 1); + EXPECT_EQ(t1.get<0>(), 0); + + utils::tuple t2 = { 2, s }; + EXPECT_EQ(sizeof(t2), 32); + EXPECT_EQ(t2.size(), 2); + EXPECT_TRUE((std::is_same_v()), int&>)); + EXPECT_TRUE((std::is_same_v()), some_struct&>)); + EXPECT_EQ(t2.get<0>(), 2); + EXPECT_EQ(t2.get<1>(), s); + t2 = {}; + EXPECT_EQ(t2.size(), 2); + EXPECT_EQ(t2.get<0>(), 0); + EXPECT_EQ(t2.get<1>(), some_struct{}); + + t2.get<0>() = 666; + t2.get<1>() = s; + EXPECT_EQ(t2.get<0>(), 666); + EXPECT_EQ(t2.get<1>(), s); + + utils::tuple t3 = { 2, s, 1234.0 }; + EXPECT_EQ(sizeof(t3), 40); + EXPECT_EQ(t3.size(), 3); + EXPECT_TRUE((std::is_same_v()), int&>)); + EXPECT_TRUE((std::is_same_v()), some_struct&>)); + EXPECT_TRUE((std::is_same_v()), double&>)); + EXPECT_EQ(t3.get<0>(), 2); + EXPECT_EQ(t3.get<1>(), s); + EXPECT_EQ(t3.get<2>(), 1234.0); + t3 = {}; + EXPECT_EQ(t3.size(), 3); + EXPECT_EQ(t3.get<0>(), 0); + EXPECT_EQ(t3.get<1>(), some_struct{}); + EXPECT_EQ(t3.get<2>(), 0.0); + + t3.get<0>() = 666; + t3.get<1>() = s; + t3.get<2>() = 7.0; + EXPECT_EQ(t3.get<0>(), 666); + EXPECT_EQ(t3.get<1>(), s); + EXPECT_EQ(t3.get<2>(), 7.0); + + // const + const utils::tuple tc = { 2, s }; + EXPECT_EQ(tc.size(), 2); + EXPECT_TRUE((std::is_same_v()), const int&>)); + EXPECT_TRUE((std::is_same_v()), const some_struct&>)); + EXPECT_EQ(tc.get<0>(), 2); + EXPECT_EQ(tc.get<1>(), s); + + // assignment + const utils::tuple ta1 = { 2, s }; + utils::tuple ta = ta1; + EXPECT_EQ(ta.size(), 2); + EXPECT_TRUE((std::is_same_v()), int&>)); + EXPECT_TRUE((std::is_same_v()), some_struct&>)); + EXPECT_EQ(ta.get<0>(), 2); + EXPECT_EQ(ta.get<1>(), s); + + utils::tuple ta2 = { 2, s }; + ta = ta2; + EXPECT_EQ(ta.size(), 2); + EXPECT_TRUE((std::is_same_v()), int&>)); + EXPECT_TRUE((std::is_same_v()), some_struct&>)); + EXPECT_EQ(ta.get<0>(), 2); + EXPECT_EQ(ta.get<1>(), s); + EXPECT_EQ(ta2.size(), 2); + EXPECT_TRUE((std::is_same_v()), int&>)); + EXPECT_TRUE((std::is_same_v()), some_struct&>)); + EXPECT_EQ(ta2.get<0>(), 2); + EXPECT_EQ(ta2.get<1>(), s); + + ta = std::move(ta2); + EXPECT_EQ(ta.size(), 2); + EXPECT_TRUE((std::is_same_v()), int&>)); + EXPECT_TRUE((std::is_same_v()), some_struct&>)); + EXPECT_EQ(ta.get<0>(), 2); + EXPECT_EQ(ta.get<1>(), s); } -}; - -TEST(Utils, Tuple) -{ - some_struct s {}; - s.v = 1234; - - utils::tuple t0 = {}; - EXPECT_EQ(t0.size(), 0); - - utils::tuple t; - EXPECT_EQ(sizeof(t), sizeof(int)); - EXPECT_TRUE((std::is_same_v()), int&>)); - EXPECT_EQ(t.size(), 1); - EXPECT_EQ(t.get<0>(), 0); - - utils::tuple t1 = 2; - EXPECT_EQ(sizeof(t1), sizeof(int)); - EXPECT_TRUE((std::is_same_v()), int&>)); - EXPECT_EQ(t1.size(), 1); - EXPECT_EQ(t1.get<0>(), 2); - t1 = {}; - EXPECT_EQ(t1.size(), 1); - EXPECT_EQ(t1.get<0>(), 0); - - utils::tuple t2 = { 2, s }; - EXPECT_EQ(sizeof(t2), 32); - EXPECT_EQ(t2.size(), 2); - EXPECT_TRUE((std::is_same_v()), int&>)); - EXPECT_TRUE((std::is_same_v()), some_struct&>)); - EXPECT_EQ(t2.get<0>(), 2); - EXPECT_EQ(t2.get<1>(), s); - t2 = {}; - EXPECT_EQ(t2.size(), 2); - EXPECT_EQ(t2.get<0>(), 0); - EXPECT_EQ(t2.get<1>(), some_struct{}); - - t2.get<0>() = 666; - t2.get<1>() = s; - EXPECT_EQ(t2.get<0>(), 666); - EXPECT_EQ(t2.get<1>(), s); - - utils::tuple t3 = { 2, s, 1234.0 }; - EXPECT_EQ(sizeof(t3), 40); - EXPECT_EQ(t3.size(), 3); - EXPECT_TRUE((std::is_same_v()), int&>)); - EXPECT_TRUE((std::is_same_v()), some_struct&>)); - EXPECT_TRUE((std::is_same_v()), double&>)); - EXPECT_EQ(t3.get<0>(), 2); - EXPECT_EQ(t3.get<1>(), s); - EXPECT_EQ(t3.get<2>(), 1234.0); - t3 = {}; - EXPECT_EQ(t3.size(), 3); - EXPECT_EQ(t3.get<0>(), 0); - EXPECT_EQ(t3.get<1>(), some_struct{}); - EXPECT_EQ(t3.get<2>(), 0.0); - - t3.get<0>() = 666; - t3.get<1>() = s; - t3.get<2>() = 7.0; - EXPECT_EQ(t3.get<0>(), 666); - EXPECT_EQ(t3.get<1>(), s); - EXPECT_EQ(t3.get<2>(), 7.0); - - // const - const utils::tuple tc = { 2, s }; - EXPECT_EQ(tc.size(), 2); - EXPECT_TRUE((std::is_same_v()), const int&>)); - EXPECT_TRUE((std::is_same_v()), const some_struct&>)); - EXPECT_EQ(tc.get<0>(), 2); - EXPECT_EQ(tc.get<1>(), s); - - // assignment - const utils::tuple ta1 = { 2, s }; - utils::tuple ta = ta1; - EXPECT_EQ(ta.size(), 2); - EXPECT_TRUE((std::is_same_v()), int&>)); - EXPECT_TRUE((std::is_same_v()), some_struct&>)); - EXPECT_EQ(ta.get<0>(), 2); - EXPECT_EQ(ta.get<1>(), s); - - utils::tuple ta2 = { 2, s }; - ta = ta2; - EXPECT_EQ(ta.size(), 2); - EXPECT_TRUE((std::is_same_v()), int&>)); - EXPECT_TRUE((std::is_same_v()), some_struct&>)); - EXPECT_EQ(ta.get<0>(), 2); - EXPECT_EQ(ta.get<1>(), s); - EXPECT_EQ(ta2.size(), 2); - EXPECT_TRUE((std::is_same_v()), int&>)); - EXPECT_TRUE((std::is_same_v()), some_struct&>)); - EXPECT_EQ(ta2.get<0>(), 2); - EXPECT_EQ(ta2.get<1>(), s); - - ta = std::move(ta2); - EXPECT_EQ(ta.size(), 2); - EXPECT_TRUE((std::is_same_v()), int&>)); - EXPECT_TRUE((std::is_same_v()), some_struct&>)); - EXPECT_EQ(ta.get<0>(), 2); - EXPECT_EQ(ta.get<1>(), s); }