Skip to content

Commit dec4ce0

Browse files
committed
Add tests for pool from pointer
Signed-off-by: Lukasz Dorau <[email protected]>
1 parent 8db6bea commit dec4ce0

File tree

1 file changed

+110
-2
lines changed

1 file changed

+110
-2
lines changed

test/provider_fixed_memory.cpp

+110-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2024 Intel Corporation
1+
// Copyright (C) 2024-2025 Intel Corporation
22
// Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
33
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
44

@@ -11,10 +11,12 @@
1111
#endif
1212

1313
#include <umf/memory_provider.h>
14+
#include <umf/pools/pool_proxy.h>
1415
#include <umf/providers/provider_fixed_memory.h>
1516

1617
using umf_test::test;
1718

19+
#define FIXED_BUFFER_SIZE (10 * utils_get_page_size())
1820
#define INVALID_PTR ((void *)0x01)
1921

2022
typedef enum purge_t {
@@ -59,7 +61,7 @@ struct FixedProviderTest
5961
test::SetUp();
6062

6163
// Allocate a memory buffer to use with the fixed memory provider
62-
memory_size = utils_get_page_size() * 10; // Allocate 10 pages
64+
memory_size = FIXED_BUFFER_SIZE; // Allocate 10 pages
6365
memory_buffer = malloc(memory_size);
6466
ASSERT_NE(memory_buffer, nullptr);
6567

@@ -391,3 +393,109 @@ TEST_P(FixedProviderTest, split) {
391393
umf_result = umfMemoryProviderFree(provider.get(), ptr2, size);
392394
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
393395
}
396+
397+
TEST_P(FixedProviderTest, pool_from_ptr_whole_size_success) {
398+
umf_result_t umf_result;
399+
size_t size_of_first_alloc;
400+
size_t size_of_pool_from_ptr;
401+
void *ptr_for_pool = nullptr;
402+
void *ptr = nullptr;
403+
404+
umf_memory_pool_handle_t proxyFixedPool = nullptr;
405+
umf_result = umfPoolCreate(umfProxyPoolOps(), provider.get(), nullptr, 0,
406+
&proxyFixedPool);
407+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
408+
409+
size_of_first_alloc = FIXED_BUFFER_SIZE - (2 * page_size);
410+
ptr_for_pool = umfPoolMalloc(proxyFixedPool, size_of_first_alloc);
411+
ASSERT_NE(ptr_for_pool, nullptr);
412+
413+
// Create provider parameters
414+
size_of_pool_from_ptr = size_of_first_alloc; // whole size
415+
umf_fixed_memory_provider_params_handle_t params = nullptr;
416+
umf_result = umfFixedMemoryProviderParamsCreate(&params, ptr_for_pool,
417+
size_of_pool_from_ptr);
418+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
419+
ASSERT_NE(params, nullptr);
420+
421+
umf_memory_provider_handle_t providerFromPtr = nullptr;
422+
umf_result = umfMemoryProviderCreate(umfFixedMemoryProviderOps(), params,
423+
&providerFromPtr);
424+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
425+
ASSERT_NE(providerFromPtr, nullptr);
426+
427+
umf_memory_pool_handle_t poolFromPtr = nullptr;
428+
umf_result = umfPoolCreate(umfProxyPoolOps(), providerFromPtr, nullptr, 0,
429+
&poolFromPtr);
430+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
431+
432+
ptr = umfPoolMalloc(poolFromPtr, size_of_pool_from_ptr);
433+
ASSERT_NE(ptr, nullptr);
434+
435+
memset(ptr, 0xFF, size_of_pool_from_ptr);
436+
437+
umf_result = umfPoolFree(poolFromPtr, ptr);
438+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
439+
440+
umfPoolDestroy(poolFromPtr);
441+
umfMemoryProviderDestroy(providerFromPtr);
442+
umfFixedMemoryProviderParamsDestroy(params);
443+
444+
umf_result = umfPoolFree(proxyFixedPool, ptr_for_pool);
445+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
446+
447+
umfPoolDestroy(proxyFixedPool);
448+
}
449+
450+
TEST_P(FixedProviderTest, pool_from_ptr_half_size_success) {
451+
umf_result_t umf_result;
452+
size_t size_of_first_alloc;
453+
size_t size_of_pool_from_ptr;
454+
void *ptr_for_pool = nullptr;
455+
void *ptr = nullptr;
456+
457+
umf_memory_pool_handle_t proxyFixedPool = nullptr;
458+
umf_result = umfPoolCreate(umfProxyPoolOps(), provider.get(), nullptr, 0,
459+
&proxyFixedPool);
460+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
461+
462+
size_of_first_alloc = FIXED_BUFFER_SIZE - (2 * page_size);
463+
ptr_for_pool = umfPoolMalloc(proxyFixedPool, size_of_first_alloc);
464+
ASSERT_NE(ptr_for_pool, nullptr);
465+
466+
// Create provider parameters
467+
size_of_pool_from_ptr = size_of_first_alloc / 2; // half size
468+
umf_fixed_memory_provider_params_handle_t params = nullptr;
469+
umf_result = umfFixedMemoryProviderParamsCreate(&params, ptr_for_pool,
470+
size_of_pool_from_ptr);
471+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
472+
ASSERT_NE(params, nullptr);
473+
474+
umf_memory_provider_handle_t providerFromPtr = nullptr;
475+
umf_result = umfMemoryProviderCreate(umfFixedMemoryProviderOps(), params,
476+
&providerFromPtr);
477+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
478+
ASSERT_NE(providerFromPtr, nullptr);
479+
480+
umf_memory_pool_handle_t poolFromPtr = nullptr;
481+
umf_result = umfPoolCreate(umfProxyPoolOps(), providerFromPtr, nullptr, 0,
482+
&poolFromPtr);
483+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
484+
485+
ptr = umfPoolMalloc(poolFromPtr, size_of_pool_from_ptr);
486+
ASSERT_NE(ptr, nullptr);
487+
488+
memset(ptr, 0xFF, size_of_pool_from_ptr);
489+
490+
umf_result = umfPoolFree(poolFromPtr, ptr);
491+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
492+
493+
umfPoolDestroy(poolFromPtr);
494+
umfMemoryProviderDestroy(providerFromPtr);
495+
umfFixedMemoryProviderParamsDestroy(params);
496+
497+
umf_result = umfPoolFree(proxyFixedPool, ptr_for_pool);
498+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
499+
500+
umfPoolDestroy(proxyFixedPool);
501+
}

0 commit comments

Comments
 (0)