#include "test.h" #include #if defined(LIBIPC_CPP_17) && defined(__cpp_lib_memory_resource) # include #endif #include "libipc/mem/memory_resource.h" namespace { template void *test_mr(T &&mr, std::size_t bytes, std::size_t alignment) { auto p = std::forward(mr).allocate(bytes, alignment); if (alignment == 0) { EXPECT_EQ(p, nullptr); } else if (p != nullptr) { EXPECT_EQ((std::size_t)p % alignment, 0); } std::forward(mr).deallocate(p, bytes, alignment); return p; } } // namespace TEST(memory_resource, traits) { EXPECT_FALSE(ipc::mem::has_allocate::value); EXPECT_FALSE(ipc::mem::has_allocate::value); EXPECT_FALSE(ipc::mem::has_allocate>::value); EXPECT_FALSE(ipc::mem::has_allocate>::value); #if defined(LIBIMP_CPP_17) && defined(__cpp_lib_memory_resource) EXPECT_TRUE (ipc::mem::has_allocate::value); EXPECT_TRUE (ipc::mem::has_allocate>::value); #endif EXPECT_FALSE(ipc::mem::has_deallocate::value); EXPECT_FALSE(ipc::mem::has_deallocate::value); EXPECT_FALSE(ipc::mem::has_deallocate>::value); EXPECT_FALSE(ipc::mem::has_deallocate>::value); #if defined(LIBIMP_CPP_17) && defined(__cpp_lib_memory_resource) EXPECT_TRUE (ipc::mem::has_deallocate::value); EXPECT_FALSE(ipc::mem::has_deallocate>::value); #endif } TEST(memory_resource, new_delete_resource) { ipc::mem::new_delete_resource mem_res; EXPECT_EQ(test_mr(mem_res, 0, 0), nullptr); EXPECT_EQ(test_mr(mem_res, 0, 1), nullptr); EXPECT_EQ(test_mr(mem_res, 0, 2), nullptr); EXPECT_EQ(test_mr(mem_res, 0, 3), nullptr); EXPECT_EQ(test_mr(mem_res, 0, 8), nullptr); EXPECT_EQ(test_mr(mem_res, 0, 64), nullptr); EXPECT_EQ(test_mr(mem_res, 1, 0), nullptr); EXPECT_NE(test_mr(mem_res, 1, 1), nullptr); EXPECT_NE(test_mr(mem_res, 1, 2), nullptr); EXPECT_EQ(test_mr(mem_res, 1, 3), nullptr); EXPECT_NE(test_mr(mem_res, 1, 8), nullptr); EXPECT_NE(test_mr(mem_res, 1, 64), nullptr); }