Skip to content

Commit 5a7279e

Browse files
committed
Add tests for jemalloc pool params
1 parent 6d226bb commit 5a7279e

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed

test/pools/jemalloc_pool.cpp

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,122 @@ TEST_F(test, metadataNotAllocatedUsingProvider) {
4242
[pool = pool.get()](void *ptr) { umfPoolFree(pool, ptr); });
4343
}
4444
}
45+
46+
using jemallocPoolParams = bool;
47+
struct umfJemallocPoolParamsTest
48+
: umf_test::test,
49+
::testing::WithParamInterface<jemallocPoolParams> {
50+
51+
struct validation_params_t {
52+
bool keep_all_memory;
53+
};
54+
55+
struct provider_validator : public umf_test::provider_ba_global {
56+
using base_provider = umf_test::provider_ba_global;
57+
58+
umf_result_t initialize(validation_params_t *params) {
59+
EXPECT_NE(params, nullptr);
60+
expected_params = params;
61+
return UMF_RESULT_SUCCESS;
62+
}
63+
umf_result_t free(void *ptr, size_t size) {
64+
EXPECT_EQ(expected_params->keep_all_memory, false);
65+
return base_provider::free(ptr, size);
66+
}
67+
68+
validation_params_t *expected_params;
69+
};
70+
71+
static constexpr umf_memory_provider_ops_t VALIDATOR_PROVIDER_OPS =
72+
umf::providerMakeCOps<provider_validator, validation_params_t>();
73+
74+
umfJemallocPoolParamsTest() : expected_params{false}, params(nullptr) {}
75+
void SetUp() override {
76+
test::SetUp();
77+
expected_params.keep_all_memory = this->GetParam();
78+
umf_result_t ret = umfJemallocPoolParamsCreate(&params);
79+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
80+
ret = umfJemallocPoolParamsSetKeepAllMemory(
81+
params, expected_params.keep_all_memory);
82+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
83+
}
84+
85+
void TearDown() override {
86+
umfJemallocPoolParamsDestroy(params);
87+
test::TearDown();
88+
}
89+
90+
umf::pool_unique_handle_t makePool() {
91+
umf_memory_provider_handle_t hProvider = nullptr;
92+
umf_memory_pool_handle_t hPool = nullptr;
93+
94+
auto ret = umfMemoryProviderCreate(&VALIDATOR_PROVIDER_OPS,
95+
&expected_params, &hProvider);
96+
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
97+
98+
ret = umfPoolCreate(umfJemallocPoolOps(), hProvider, params,
99+
UMF_POOL_CREATE_FLAG_OWN_PROVIDER, &hPool);
100+
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
101+
102+
return umf::pool_unique_handle_t(hPool, &umfPoolDestroy);
103+
}
104+
105+
void allocFreeFlow() {
106+
static const size_t ALLOC_SIZE = 128;
107+
static const size_t NUM_ALLOCATIONS = 100;
108+
std::vector<void *> ptrs;
109+
110+
auto pool = makePool();
111+
ASSERT_NE(pool, nullptr);
112+
113+
for (size_t i = 0; i < NUM_ALLOCATIONS; ++i) {
114+
auto *ptr = umfPoolMalloc(pool.get(), ALLOC_SIZE);
115+
ASSERT_NE(ptr, nullptr);
116+
ptrs.push_back(ptr);
117+
}
118+
119+
for (size_t i = 0; i < NUM_ALLOCATIONS; ++i) {
120+
auto ret = umfPoolFree(pool.get(), ptrs[i]);
121+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
122+
}
123+
124+
// Now pool can call free during pool destruction
125+
expected_params.keep_all_memory = false;
126+
}
127+
128+
validation_params_t expected_params;
129+
umf_jemalloc_pool_params_handle_t params;
130+
};
131+
132+
TEST_P(umfJemallocPoolParamsTest, allocFree) { allocFreeFlow(); }
133+
134+
TEST_P(umfJemallocPoolParamsTest, updateParams) {
135+
expected_params.keep_all_memory = !expected_params.keep_all_memory;
136+
umf_result_t ret = umfJemallocPoolParamsSetKeepAllMemory(
137+
params, expected_params.keep_all_memory);
138+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
139+
140+
allocFreeFlow();
141+
}
142+
143+
TEST_P(umfJemallocPoolParamsTest, invalidParams) {
144+
umf_result_t ret = umfJemallocPoolParamsCreate(nullptr);
145+
ASSERT_EQ(ret, UMF_RESULT_ERROR_INVALID_ARGUMENT);
146+
147+
ret = umfJemallocPoolParamsSetKeepAllMemory(nullptr, true);
148+
ASSERT_EQ(ret, UMF_RESULT_ERROR_INVALID_ARGUMENT);
149+
150+
ret = umfJemallocPoolParamsSetKeepAllMemory(nullptr, false);
151+
ASSERT_EQ(ret, UMF_RESULT_ERROR_INVALID_ARGUMENT);
152+
153+
ret = umfJemallocPoolParamsDestroy(nullptr);
154+
ASSERT_EQ(ret, UMF_RESULT_ERROR_INVALID_ARGUMENT);
155+
}
156+
157+
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(umfJemallocPoolParamsTest);
158+
159+
/* TODO: enable this test after the issue #903 is fixed.
160+
(https://github.com/oneapi-src/unified-memory-framework/issues/903)
161+
INSTANTIATE_TEST_SUITE_P(jemallocPoolTest, umfJemallocPoolParamsTest,
162+
testing::Values(false, true));
163+
*/

0 commit comments

Comments
 (0)