29 #include "gtest/gtest.h" 34 #if defined __GNUC__ && !defined _WIN32 40 #define BASE(data) (char*)(((uintptr_t)(data.get() + page_size - 1)) / page_size * page_size) 42 TEST(mlocker, distinct_1)
48 std::unique_ptr<char[]> data{
new char[8 * page_size]};
49 std::shared_ptr<epee::mlocker> m0{
new epee::mlocker(BASE(data), 1)};
50 std::shared_ptr<epee::mlocker> m1{
new epee::mlocker(BASE(data) + 2 * page_size, 1)};
51 std::shared_ptr<epee::mlocker> m2{
new epee::mlocker(BASE(data) + 3 * page_size, 1)};
61 TEST(mlocker, distinct_full_page)
67 std::unique_ptr<char[]> data{
new char[8 * page_size]};
68 std::shared_ptr<epee::mlocker> m0{
new epee::mlocker(BASE(data), page_size)};
69 std::shared_ptr<epee::mlocker> m1{
new epee::mlocker(BASE(data) + 2 * page_size, page_size)};
70 std::shared_ptr<epee::mlocker> m2{
new epee::mlocker(BASE(data) + 3 * page_size, page_size)};
80 TEST(mlocker, identical)
86 std::unique_ptr<char[]> data{
new char[8 * page_size]};
87 std::shared_ptr<epee::mlocker> m0{
new epee::mlocker(BASE(data) + page_size, 32)};
88 std::shared_ptr<epee::mlocker> m1{
new epee::mlocker(BASE(data) + page_size, 32)};
89 std::shared_ptr<epee::mlocker> m2{
new epee::mlocker(BASE(data) + page_size, 32)};
101 TEST(mlocker, overlapping_small)
107 std::unique_ptr<char[]> data{
new char[8 * page_size]};
108 std::shared_ptr<epee::mlocker> m0{
new epee::mlocker(BASE(data), 32)};
109 std::shared_ptr<epee::mlocker> m1{
new epee::mlocker(BASE(data) + 16, 32)};
110 std::shared_ptr<epee::mlocker> m2{
new epee::mlocker(BASE(data) + 8, 32)};
122 TEST(mlocker, multi_page)
128 std::unique_ptr<char[]> data{
new char[8 * page_size]};
129 std::shared_ptr<epee::mlocker> m0{
new epee::mlocker(BASE(data) + page_size, page_size * 3)};
132 std::shared_ptr<epee::mlocker> m1{
new epee::mlocker(BASE(data) + page_size * 7, page_size)};
143 TEST(mlocker, cross_page)
149 std::unique_ptr<char[]> data{
new char[2 * page_size]};
150 std::shared_ptr<epee::mlocker> m0{
new epee::mlocker(BASE(data) + page_size - 1, 2)};
158 TEST(mlocker, redundant)
164 std::unique_ptr<char[]> data{
new char[2 * page_size]};
167 std::shared_ptr<epee::mlocker> m0{
new epee::mlocker(BASE(data), 32)};
170 std::shared_ptr<epee::mlocker> m1{
new epee::mlocker(BASE(data), 32)};
181 TEST(mlocker, mlocked)
static size_t get_page_size()
#define TEST(test_case_name, test_name)
#define ASSERT_EQ(val1, val2)
unsigned __int64 uint64_t
static size_t get_num_locked_objects()
static size_t get_num_locked_pages()
#define ASSERT_TRUE(condition)